Android · 2013/07/07

Android多线程的理解

Android开发中,多线程用的非常普遍,比如异步加载、定时处理。常用的方式有Thread+Handler方式,Runnable+Handler方式,AsyncTask方式等。

Thread+Handler方式是最Java的模式,也是大部分GUI软件架构的处理方式。所有的对象其实都有一个Handler,处理消息的收发,底层OS(?)处理消息的队列,包括默认的线程和消息优先级处理。另外,Handler应该也是一个特殊的线程。在Android里面,所有的OnXXX都是回调函数,其实也是这种模式,Activity接收系统的消息,然后调用这些回调进行处理。(Android源码不得不看啊!)

对于开发者,只需要新建一个自己的Handler,然后将Handler引用给需要的Thread就行啦。因此用这种模式应该可以解决所有的多线程任务。

 

Runnable+Handler方式是上面模式的一个简化封装版,RunnableThread的简化版,只实现了run接口;这边的Handler一般也只是一个最基本的Handler,并不需要去写消息处理。通过Handler可以很容易实现延时处理任务、Cancel延时任务。

类似的还有Timer+TimerTask,RunOnUIThread等;

 

AsyncTask是最Android的模式,它是用Android模式来封装Thread+Handler模式。只要在UI线程新建一个它的子类,实现几个OnXXX回调方法,就可以实现多线程处理了。

 

从使用来说,我觉得基本原则应该是尽量使用AsynTask,毕竟是Android封装的,代码容易看懂;能用Runnable就不用Thread,简化代码;而对于复杂的、线程较多的、需要长时间运行或者在后台长保的得用Thread

更高级的,应该是使用线程池了。