UUTON

悠悠途恩

Android Handler

在Application启动后,Android系统会为这个应用创建一主线程(Main Thread),主线程负责把消息分发给相应的UI控件,并处理屏幕绘制事件,因此主线程也称为UI 线程,缺省情况下只有一个Main Thread在运行,如果所有的操作都发生在这个UI线程中,比如一些费时的操作如网络操作,数据库访问将会阻塞UI线程,造成应用程序不响应用户输入,严重的情况Android将显示ANR (应用程序无响应)对应框,强制应用程序退出。所以设计一个及时响应用户的应用的一个基本原则是:永远不要阻塞UI线程,如果你有一些费时的操作,启动一个工作线程(worker thread)来完成。

使用工作线程时如果需要更新UI ,需要注意的是,目前大部分系统UI 都是设计成单线程模式的,也就是说UI 组件定义的操作不是”Thread -Safe”的,不能直接在非UI线程(如工作线程)中更新UI。幸运的是Android系统提供多种类或方法来实现从非UI线程中更新UI

操作,如Handler。

在Android的UI开发中,我们经常会使用Handler来控制主UI程序的界面变化。有关Handler的作用,我们总结为:与其他线程协同工作,接收其他线程的消息并通过接收到的消息更新主UI线程的内容。

这时我们会想到使用线程来完成以上工作,即当按钮被按下的时候新开启一个线程来完成网络连接工作,并把得到的结果更新到UI上面。但是,这时候又会出现另一个问题,在Android中,主线程是非线程安全的,也就是说UI的更新只能在本线程中完成,其他线程无法直接对主线程进行操作。


为了解决以上问题,Android设计了Handler机制,由Handler来负责与子线程进行通讯,从而让子线程与主线程之间建立起协作的桥梁,使Android的UI更新的问题得到完美的解决。接下来ATAAW.COM举例来诠释Handler的基本使用方法。


对于Handler 定义两类操作:

一、定义在未来的某个时刻执行某个操作(Runnables) ,主要通过调用

post(Runnable),

postAtTime(Runnable, long)

postDelayed(Runnable, long) 等来完成。

二、在别的Thread的Event Queue添加一个操作,以便在该Thread中执行,这主要通过调用

sendEmptyMessage(int)

sendMessage(Message)

sendMessageAtTime(Message, long)来完成。



评论
热度(2)

© UUTON | Powered by LOFTER