asynctask(Android中的线程和线程池)

2023-09-26 13:13:01 首页 > 操作系统

  AsyncTask是一种在Android操作系统中扮演线程角色的工具,除了Thread外,还有其他类似的工具如IntentService和HandlerThread。你可以把它们看作是执行任务的特殊线程。比如,IntentService使用HandlerThread来执行任务,它像一个后台线程,同时也是一个服务,所以不容易被系统杀死。

  在HandlerThread中,run方法是一个无限循环,这意味着任务会持续执行。

  在IntentService中,任务是按照队列顺序执行的,这就是说,一个任务完成后才会执行下一个任务。

  接下来是AsyncTask。在Android1.6之前,AsyncTask会按照顺序执行任务,而从Android1.6开始,它采用了线程池里的并行执行方式。然而,从Android3.0开始又改回了串行执行(为了避免并发错误),但是某些特定任务仍然可以并行执行。

  需要注意的是,AsyncTask必须在UI线程调用,这个规则并非绝对,它会根据不同的版本而有所不同。在API 16之前、API 16到22、以及API 22以后的版本中,规则都有所不同。

  这是为什么呢?因为AsyncTask内部有一个静态Handler,它使用UI线程的Looper来处理消息。这也就是为什么AsyncTask必须在UI线程调用的原因,因为子线程默认是没有Looper的,无法创建Handler,所以程序会直接崩溃。

  在AsyncTask中,有两个线程池和一个Handler。一个线程池用于任务排队,另一个线程池用于真正执行任务。InternalHandler的作用是将执行环境从线程池切换到主线程。

  另外,AsyncTask可以以串行或并行的方式执行任务,取决于具体的设置。

  最后,我想谈谈线程池中多余线程的回收。

最近发表
标签列表
最新留言