android之Handler整理

2015-08-25  本文已影响139人  王小冬

Handler设计初衷:处于性能的考虑,android的UI线程不是操作安全的,这就意味着如果多个线程同时操作UI线程,就会引发安全问题,为了解决这个问题,android定了一条规则,只有UI线程才可以更新UI。

那么问题来了,如果其他线程想要更新UI怎么办呢,这时候就需要用到Handler的消息传递机制了。Handler的作用主要有两个:

1,在新线程中发送消息给UI线程;

2,在UI线程中接收这个消息类更新UI;

常用方法有下面几个:

handleMessage():处理消息的方法,该方法经常被重写;

hasMessages():检查消息队列中是否包含what属性为指定值的消息;

sendEmptyMessage():发送空消息;

sendEmptyMessageDelayed():指定多少毫秒后发送消息;

sendMessage():立即发送消息;

sendMessageDelayed():指定多少毫秒后发送消息;

很多时候Handler并不是单独使用的而是配合其他的组件一起完成任务:

Message:Handler接收和处理的消息对象;

Looper:每个线程只能拥有一个Looper,它的loop方法负责读取MessageQueue中的消息,读到消息之后就把消息交给发送改消息的Handler处理;

MessageQueue:消息队列,它采用先进先出的方式来管理Message。程序创建Looper对象时会在它的构造器中创建Looper对象。

相信很多人也用过AsyncTask进行异步传输,下面就来比较一下Handler和AsyncTask的优缺点:

1 ) AsyncTask实现的原理和适用的优缺点

AsyncTask,是android提供的轻量级的异步类,可以直接继承AsyncTask,在类中实现异步操作,并提供接口反馈当前异步执行的程度(可以通过接口实现UI进度更新),最后反馈执行的结果给UI主线程.

使用的优点:

l  简单,快捷

l  过程可控

使用的缺点:

l  在使用多个异步操作和并需要进行UI变更时,就变得复杂起来.

2 )Handler异步实现的原理和适用的优缺点

在Handler 异步实现时,涉及到 Handler, Looper, Message,Thread四个对象,实现异步的流程是主线程启动Thread(子线程)àthread(子线程)运行并生成Message-àLooper获取Message并传递给HandleràHandler逐个获取Looper中的Message,并进行UI变更。

使用的优点:

l  结构清晰,功能定义明确

l  对于多个后台任务时,简单,清晰

使用的缺点:

l  在单个后台异步处理时,显得代码过多,结构过于复杂(相对性)

上一篇下一篇

猜你喜欢

热点阅读