Handler类的主要作用 :
(1) 在新启动的线程中发送消息
(2) 在主线程中获取,处理消息
Handler Looper MessageQueue的工作原理
Handler工作组件介绍 :
Message : Handler接收和处理消息的对象
Looper : 每个线程只能拥有一个Looper. loop方法负责读取MessageQueue中的消息, 读到信息之后就把消息交给发送该消息的Handler进行处理
MessageQueue : 消息队列,它采用先进先出的方式来管理Message. 程序创建Looper对象时, 会在它的构造器中创建MessageQueue对象
步骤 :
新线程创建Handler对象时,必须先创建Looper,因此在新线程中程序先调用Loop的prepare方法为当前线程创建一个Looper实例,并创建配套的MessageQueue.新线程有了Looper对象之后,再创建Handler对象,程序最后再调用Looper的loop方法.
为了解决新线程不能更新UI组件的问题,Android提供了如下几种解决方案 :
(1) 使用Handler实现线程之间的通信
(2) Activity.runOnUiThread(Runnable)
(3) View.post(Runnable)
(4) View.postDelayed(Runnable, long)
使用AsyncTask时必须遵守如下规则 :
(1) 必须在UI线程中创建AsyncTask的实例
(2) 必须在UI线程中调用AsyncTask的execute()方法
(3) AsyncTask的onPreExecute(),onPostExecute(Result result),doInBackground(Params... params),onProgressUpdate(Progress... values)方
法,不应该由程序员代码调用,而是由Android系统负责调用
(4) 每个AsyncTask只能被执行一次,多次调用将会引发异常