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  在单个后台异步处理时,显得代码过多,结构过于复杂(相对性)

更多相关文章

  1. Handler原理
  2. android HTTP 通信, XML 解析, 通过 Hander 实现异步消息处理 (1)
  3. Android开发之Android开发规范(初)
  4. Android极光推送(Android(安卓)studio 3.0+)
  5. Android中从源码分析关于AsyncTask的使用
  6. Looper,Handler,Message
  7. Android(安卓)Handler机制之循环消息队列的退出
  8. Android开发规范FML
  9. Android异步3:AsyncTask更新UI

随机推荐

  1. 36、Android(安卓)Bitmap 全面解析
  2. Android编译过程详解(一)
  3. android webview开发html5
  4. 《疯狂Android讲义》第二版目录
  5. android的Theme
  6. 设置Android应用程序横竖屏显示
  7. Android(安卓)中 GridView 常用属性合集
  8. Android(安卓)TextView的一些小知识
  9. RadioGroup和RadioButton
  10. android json解析及简单例子