第十一章  Android的线程和线程池

AsyncTask底层是线程池;IntentService/HandlerThread底层是线程;
在Android中,线程的形态有很多种:
(1)、AsyncTask封装了线程池和Handler。
(2)、HandlerThread是具有消息循环的线程,内部可以使用handler
(3)、IntentService是一种Service,内部采用HandlerThread来执行任务,当任务执行完毕后IntentService会自动退出。由于它是一种Service,所以不容易被系统杀死

##11.1、AsyncTask
AsyncTask是一种轻量级的异步任务类, 他可以在线程池中执行后台任务, 然后把执行的进度和最终的结果传递给主线程并在主线程更新UI. 从实现上来说. AsyncTask封装了Thread和Handler, 通过AsyncTask可以更加方便地执行后台任务,但是AsyncTask并不适合进行特别耗时的后台任务,对于特别耗时的任务来说, 建议使用线程池。

AsyncTask就是一个抽象的泛型类. 这三个泛型的意义

Params:参数的类型

Progress:后台任务的执行进度的类型

Result:后台任务的返回结果的类型

如果不需要传递具体的参数, 那么这三个泛型参数可以用Void来代替.

四个方法 :

onPreExecute()
在主线程执行, 在异步任务执行之前, 此方法会被调用, 一般可以用于做一些准备工作
doInBackground()
在线程池中执行, 此方法用于执行异步任务, 参数params表示异步任务的输入参数. 在此方法中可以通过publishProgress()方法来更新任务的进度, publishProgress()方法会调用onProgressUpdate()方法. 另外此方法需要返回计算结果给onPostExecute()
onProgressUpdate()
在主线程执行,在异步任务执行之后, 此方法会被调用, 其中result参数是后台任务的返回值, 即doInBackground()的返回值.
onPostExecute()
在主线程执行, 在异步任务执行之后, 此方法会被调用, 其中result参数是后台任务的返回值, 即doInBackground的返回值.
除了上述的四种方法,还有onCancelled(), 它同样在主线程执行, 当异步任务被取消时, onCancelled()方法会被调用, 这个时候onPostExecute()则不会被调用.

更多相关文章

  1. Android(安卓)GLSurfaceView.Renderer 类 onDrawFrame 方法的刷
  2. 使用ndk中的gcc编译Android可执行文件
  3. android 更新界面视图 Handler和runOnUiThread
  4. [Android]_[ACtivity生命周期]
  5. Android(安卓)FFmpeg系列——4 子线程播放音视频
  6. sqlite database lock problem in android content providers
  7. Android(安卓)Timer 分析
  8. android企业开发学习——handler
  9. 阅读Android消息机制源码的随手笔记

随机推荐

  1. Android5.1禁止状态栏下拉(SystemUI Statu
  2. Android(安卓)4.4不能启动问题的解决
  3. Android录音并根据音量大小实现简单动画
  4. Android(安卓)采用post方式提交数据到服
  5. android 工程师级别划分及学习路线
  6. Android NDK开发:SeetaFace2实现人脸登录
  7. Android 9.0中sdcard 的权限和挂载问题
  8. [置顶] Android 从硬件到应用:一步一步向
  9. Android入门(二):Android工程目录结构
  10. 深入浅出Android App耗电量统计