安卓面试面试宝典Android 面试专辑

Android面试之线程和线程池

2017-03-06  本文已影响88人  FeelsChaotic

Android中的线程形态

  1. AsyncTask
    底层用到了线程池。AsyncTask封装了线程池和Handler,它主要是为了方便开发者在子线程中更新UI。

AsyncTask内的Handler是一个静态的Handler对象,为了能够将执行环境切换到主线程,这就要求Handler这个对象必须在主线程中创建。由于静态成员会在加载类的时候进行初始化,因此这就变相要求AsyncTask的类必须在主线程中加载,否则同一个进程中的AsyncTask都无法正常工作。

注意:从Android 3.0开始,默认情况下AsyncTask是串行执行的。但在Android 3.0之前是并行执行的。

  1. IntentService
    底层直接使用了线程,IntentService是一个服务,系统对其进行了封装使其可以更方便地执行后台任务,IntentService内部采用HandlerThread来执行任务,当任务执行完毕后IntentService会自动退出。

特殊的Service,它继承了Service并且它是抽象类。IntentService可用于执行后台耗时的任务,当任务执行后它会自动停止,同时由于IntentService是服务的原因,这导致他的优先级比单纯的线程要高很多,所以IntentService比较适合执行一些高优先级的后台任务。

  1. HandlerThread
    底层直接使用了线程,HandlerThread是一中消息循环的线程,在它的内部可以使用Handler。

HandlerThread继承了Thread,它是一种可以使用Handler的Thread,它的实现很简单,就在run方法中通过Looper.prepare()来创建消息队列,并通过Looper.loop()来开启消息循环,这样在实际的使用中就允许在HandlerThread中创建Handler。

Android中的线程池

  1. 线程池的优点:
  1. Android中的线程池的概念来源于Java中的Executor,Executor是一个接口,真正的线程池的实现为ThreadPoolExecutor。

ThreadPoolExecutor提供一系列参数来配置线程池,通过不同的参数可以创建不同的线程池,从线程池的功能特性来说,线程池主要分为4类。

ThreadPoolExecutor执行任务时大致遵循以下规则:

  1. 线程池主要有4类:
上一篇下一篇

猜你喜欢

热点阅读