美文网首页
android之Handler整理

android之Handler整理

作者: 王小冬 | 来源:发表于2015-08-25 12:08 被阅读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  在单个后台异步处理时,显得代码过多,结构过于复杂(相对性)

    相关文章

      网友评论

          本文标题:android之Handler整理

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