异步任务的 "取代者" Handler:

异步任务的

Handler(可以取代 异步任务):

作用: 在子线程 和 主线程 之间 发送,接收,处理 消息.

原理: Handler中有
Looper类(循环接收Message消息(相当于Handler的”秘书”),并发送给Handler对象), Looper对象中有 MessageQueue类(Message队列:用来存放Message) ;

Handler的常用方法:

 接收消息(Message类)的 方法:

 handleMessage(Message msg) //处理返回给 handler的消息

 发送消息的 方法: 

.sendMessage(Message msg) //发送 消息(发送的 普通消息:基本类型 和 Object引用类型)

  .post(Runnable r) //发送 消息(发送的是 线程)

Message类(消息类/它本身即是消息, 是 存放数据的容器/载体 )

存放数据的 不同消息的属性(也就是将 数据类型分类 存放):

.what //存放空(empty) 消息

.arg1 和 .arg2 //存放 整型数据

.obj //存放Object类型 数据
.data //存放 Bundle类型 数据
存放message.setData(data)
/ 接收:
Bundle data = message.getData();

获取Message的对象的方法:

1, 通过构造方法获得(不建议使用):
Message message = new Message();
2, 通过Message的静态方法:
Message message = Message.obtain();
3, 通过Handler的方法:
Message message = handle.obtainMessage();

消息传递 方向:

  1. 子(线程) 给 主(线程)(Handler在主线程接收Message) 发消息(Object / 线程):

主线程 自带Looper对象(但子线程 需要手动创建Looper对象), Handler实例化对象创建在哪个线程, 哪个线程
就是Handler接收信息的 线程!!!

  1. 主(线程) 给 子(线程)(Handler在子线程接收Message) 发消息(Object / 线程):

注意: 由于子线程没有现成的 Looper(接收消息的对象) 所以需要 :

  Looper.prepare();  //1.创建looper对象

     ...  // 2. New Handler(){ Message }

  Looper.loop(); //3.启动looper对象 用来循环接收Message

你可能感兴趣的:(新手)