Android开发之Handler

Handler(完成子线程和主线程的通信)
        当启动一个Android应用程序的时候,系统会为当前的程序创建一个进程,这个进程中会创建一个主线程,这个主线程会运行一个消息队列(Message Queue),这个消息队列是用来管理一个应用程序中最高级别的一些对象(四大组件).在Android程序中可以自己创建子线程(work thread),然后通过Handler和程序的主线程进行通信.

handler: 允许发送和处理和一个线程的消息队列相关的Message对象或者是Runnable对象.
handler 只会和一个线程以及这个线程的消息对列关联.handler会和创建的线程以及该线程的消息队列绑定.  handler往绑定的线程的消息队列中传递Message或Runnable,并且当被传递的Message或者是Runnable被从该线程的消息队列中取出来之后,handler还可以处理他们.
 
handler的两种用法:1.分配Message对象   2.在另外一个线程添加一段操作
当使用Handler实现子线程和主线程的通信的时候可以调用post版本的方法实现也可以sendMessage版本的方法实现.

对于post系列的方法和sendMessage系列的方法分别有3种:1.立刻执行  2.延时执行  3.在一个绝对时间执行
SystemClock.uptimeMillis()返回值表示手机从开机到该方法被调用的时间段
//主线程不能执行耗时操作(网络请求)
//子线程不能操作UI
//通过Handler把子线程产生的数据发送到主线程
handler.sendEmptyMessage(i);//创建只有what字段的Message对象,并且发送到主线程中

用  Handler  实现线程通信的相关对象: Handler  MessageQueue  Message  Looper (用Handler实现线程间的通信模型相关的4个对象)
以子线程向主线程发送数据为例,  Handler  通信模型的工作方式: 在主线程中创建  Handler  对象,该Handler对象,该Handler对象就和主线程的消息队列关联,在子线程中通过该Handler对象发送一个携带有数据的Message  对象,因为该  Handler  是和主线程关联的,所以通过该  Handler  发送  Message  的时候,该  Message  会被发送到主线程的  MessageQueue.  主线程的MessageQueue会有一个Looper对象实时监测主线程的MessageQueue,当主线程的MessageQueue中有新的Message被发送过来之后,Looper对象就会把该Message对象从主线程的 MessageQueue 中取出交给 Handler 进行处理, Handler 的  handleMessage() 方法就会最终接受该  Message  对象(取数据进行处理).


通过post系列的方法实现线程间的通信,用到的是Runnable
通过sendMessage方法实现线程间的通信,要用到Message传递数据.
    Message类的作用:作为线程间通信的使者(携带数据)
    Message类有4个常用的属性:
            1. what  整数  表示Message的id

            2. obj   Object   携带引用数据类型

            3. arg1  整数   没有特定含义    用于携带整数数据    
     
            4. arg2  整数   没有特定含义    用于携带整数数据    
     
    创建Message对象的时候可以通过共有的构造方法但是最好使用
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值