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()方法就可。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值