美文网首页
Android的消息机制与异步任务

Android的消息机制与异步任务

作者: Chenstyle | 来源:发表于2020-02-06 11:46 被阅读0次

消息机制的引入

  • 在Android中,只有在UIThread中才能直接更新用户界面
  • 在Android中,长时间的工作(IO,编解码,联网)都需要在WokerThread中执行
  • 在分线程中获得服务器数据后,需要立即到主线程中去更新界面显示

如何实现线程间通信呢?

  • 消息机制:Handler + Thread
  • 异步任务:AsyncTask == Handler + ThreadPool

Message的使用

message是线程间通信的数据载体

  • 对象的创建
Message.obtain();  // 有可能是新建的,也可能是复用消息池中
  • 对象的使用
int what; // 标识
int args1; // 用于保存int数据
int args2; // 用于保存int数据
Object obj; // 用于保存对象数据

Handler target; // 保存处理消息的handler(发消息的handler)
long when; // 消息应该被处理的时间
Message next; // 有了此属性Message就可以形成队列
static Message pool; // 消息池 缓存用过的消息用于复用
Runnable callBack; // 用于处理当前消息的回调器

Handler的使用

发送/处理/移除消息

  • 对象的创建:new Handler();
  • 对象的使用:
// a.发送消息
    发送即时消息:sendMessage(Message message);
    发送延迟消息:sendMessageDelayed(Message message, long delayTime);
    发送空消息:sendEmptyMessage(int what);
    发送延迟消息:sendEmptyMessageDelayed(int what, long delayTime);
// b.处理消息
    void HandleMessage(Message msg); // 回调方法
// c.移除消息
    removeMessage(int what); // 移除指定what的未处理message
    removeCallbacksAndMessage(Object token); // 如果token传null,移除所有未处理的消息

MessageQueue:消息队列

  • 用来存放通过Handler发送的消息
  • 它是一个按Message的when排序的优先级队列

Looper:循环器

  • 负责循环取出Message Queue里面的当前需要处理的Message
  • 交给对应的Handler进行处理
  • 处理完后,将Message缓存到消息池中,以备复用

Handler的原理

  • 一个线程开启循环模式持续监听并依次处理其他线程给它发的消息。

相关文章

网友评论

      本文标题:Android的消息机制与异步任务

      本文链接:https://www.haomeiwen.com/subject/pqbyxhtx.html