Handler的应用场景

如果在一个activity里面有多个线程去更新UI,并且都没有加锁机制,那就会造成更新UI错乱;而如果对更新UI的操作都进行加锁处理,就会造成性能下降。使用消息机制,就不必担心多线程的问题,因为更新UI 的操作,都是在主线程的消息队列当中去轮询处理的,即UI Thread更新UI。

  1. 更新UI界面(代码略)
  2. 自定义与线程相关的handler

在一个子线程中创建一个Handler,然后使用这个handler实例在其他任何线程中发送消息,最终处理消息的代码都会在你创建Handler实例的线程中运行。

示例代码如下:

public class Demo extends Activity{
        
    @Override
    protected void onCreate(Bundle savedInstanceState){
        super.onCreate(savedInstanceState);
        
        setContentView(R.layout.activity_main);
        myThread=new MyThrread();
        myThread.start();
        try{
            Thread.sleep(1000);
        }catch(InterruptedException e){
            e.printStackTrace();
        }

        myThread.mHandler.sendEmptyMessage(1);
    }

    class MyThread extends Thread{
        private Handler mhandler;
        @Override
        public void run(){
            super.run();
            Looper.prepare();
            mHandler=new Handler(){
                @Override
                public void HandleMessage(Message msg){
                    switch(msg.what){
                        case 1:
                            Log.d(TAG,"MMMMMM");
                            break;
                    }
                }
            };
            Looper.loop();
        }

    }
}

3.定时器

如代码:

private static final int DISPLAY_TIME=3000;

new Handler().postDelayed(new Runnable(){
        public void run(){
                //代码块
        }
        
        },DISPLAY_TIME);


    //关闭定时器
    handler.removeCallbacks(runnable);

4. 拦截Handler传递的消息

只需要重写onHandleMesage()方法就可。

猜你喜欢

转载自blog.csdn.net/weixin_38664232/article/details/83448189