开发艺术探索----Android中的线程和线程池

线程在Android中是一个很重要的概念,从用途上来说,线程分为主线程和子线程,主线程主要处理和界面相关的事情,而子线程则往往用于执行耗时操作。由于Android的特性,如果在主线程中执行耗时操作那么就会导致程序无法及时响应,因此耗时操作必须在子线程中执行。除了Thread,Android中扮演线程角色的还有很多,比如AcyncTask和IntentService,同时HandlerThread也是一种特殊线程,但是他们本质上也是一种特殊的线程。

AsyncTask封装了线程池和Handler,主要为了方便在子线程中更新UI。HandlerThread是一种具有消息循环的线程,在它的内部可以使用Handler.IntentService是一个服务,IntentService内部采用HandlerThread来执行任务,当任务执行完毕后,IntentService自动退出。从任务执行来看,IntentService的作用很像一个后台线程,但是IntentService是一种服务,它不容易被系统杀死从而尽量保证任务的执行,而如果是一个后台线程,由于这个时候进程中没有活动的四大组件,那么这个进程的优先级就会很低,很容易被系统杀死,这就是IntentService的优点。

主线程主要处理用户操作和运行四大组件。子线程则是执行耗时操作,比如网络请求,I/O操作等。

1 AsyncTask 是一种轻量级的异步任务类,它可以在线程池中执行后台任务,然后把执行完的进度和最终结果传递给主线程并在主线程中更新UI。从实现上来说,AsyncTask封装了Thread和Handler,通过Acyncask可以更加方便地执行后台任务以及在主线程中访问UI,但是AsyncTask并不适合特别耗时的后台任务,对于比较耗时的操作,建议使用线程池。
2 HandlerThread继承了Thread,它是一种可以使用Handler的Thread,它的实现也很简单,就是在run方法中通过Looper.prepare()来创建消息队列,并通过Looper.loop()来开启消息循环,这样在实际的使用中就运行在HandlerThread中创建Handler了。
3 IntentService 是一种特殊的Service,它继承了Service并且它是一个抽象类,因此必须创建它的子类才能使用IntentService.IntentService可用于执行后台耗时的任务,当任务执行完后它会自动停止,同时由于IntentService是服务的原因,这导致它的优先级比单纯的线程高很多,所有它适合执行一些优先级比较高的后台任务,因为它优先级高不容易被系统杀死。在实现上IntentService封装了HandlerThread和Handler

你可能感兴趣的:(开发艺术探索----Android中的线程和线程池)