Android Handler消息机制原理及总结

Android中的消息机制主要就是指Handler的消息机制,Handler相信大家已经非常熟悉了,它可以将一个任务切换到Handler所在的线程中去执行,开发中,当我们在子线程做了一些操作后需要更新UI,由于Android不允许在子线程中访问UI控件,所以我们一般都会使用handler来实现。

Handler的机制需要MessageQueue、Looper和Message的支持。他们在消息机制中各扮演了不同的角色

Handler:负责消息的发送和接收处理
MessageQueue:消息队列,一个消息存储单位,经常需要进行增减,内部使用的是单链表的结构
Looper:消息循环。会不停地从MessageQueue中取消息,如果有新消息就会立刻处理,否则就一直阻塞在那里
Message:消息载体

下面通过一段简单的代码来分析整个执行过程。

 private TextView textView;
 private Handler handler = new Handler(){
     @Override
     public void handleMessage(Message msg) {
          super.handleMessage(msg);
          textView.setText("消息处理.....");
     }
 };
@Override
protected void onCreate(Bundle savedInstanceState){
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        textView = (TextView) findViewById(R.id.mytv);
        new Thread(new Runnable() {
            @Override
            public void run() {
                //模拟耗时操作
                SystemClock.sleep(3000);
                handler.sendMessage(new Message());
            }
        }).start();

    }

就是在子线程中做了一些耗时操作后,通过Handler发送消息去更新UI

Hanlder是怎么接受到消息的呢?

Looper

Looper几个主要的方法
- Looper.prepare():为当前线程创建一个Looper
- Looper.loop():开启消息循环
- Looper.getMainLoop():可以在任何地方获取到主线程的
- Looper.quit():直接退出Looper
- quitSafely():设置一个标记,把消息队列的所有消息处理完后才会退出

//创建一个新的Looper并放到当前线程的ThreadLocal中去
 private static void prepare(boolean quitAllowed){
        if (sThreadLocal.get() != 
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值