Android之IntentService源码浅析
2015-09-10 17:36
232 查看
前言:我们知道service既不是线程也不是进程,一般使用方法是在service开启一个线程执行任务,但是当这个service结束时线程并没有结束,因为service开启的线程是不依赖于service的,而是依赖于宿主也就是主进程,那么我们想要控制这个线程怎么办呢?当然可以在destory方法里面手动干掉这个线程,但是这么做太暴力了,于是Android提供给我们一个组件IntentService来解决这个问题,官方定义是异步任务的解决方案。本篇就是结合源码分析这个解决类。
正文:
思路是启动顺序来分析,分别是onCreate-->onStart-->onStartCommand-->onHandleIntent-->onDestroy
step1.继承自service没什么好说的
step2.
onCreate()方法定义了一个HandlerThread线程,并启动之(HandlerThread线程是含有Looper的线程,详情见消息机制)。
step3.
onStart()方法,发送startId和intent给消息队列
step4.
这里就是接收消息,并调用onHandleIntent方法(一般这个方法定义我们执行任务的线程任务),任务完成后根据发消息回来的startId结束当前service
step5.
这里其实就是调用onStart方法,返回值用在服务被干掉自动恢复xxx(这里不太懂,用的也不多)
step6.
结束的时候顺便把消息线程结束,至此流程就结束了。
总结:综上分析,IntentService适合用在一次性任务,比如下载一张图片,一首歌等等,因为开启之后任务结束后service和线程会自动结束,我们只需要传数据就行了。
需要注意的是,在程序里面不要重复调用stopself,因为任务处理完会发送消息自动结束service。
说白了这个实现类只是普通的service+自动结束任务而已
正文:
思路是启动顺序来分析,分别是onCreate-->onStart-->onStartCommand-->onHandleIntent-->onDestroy
step1.继承自service没什么好说的
step2.
onCreate()方法定义了一个HandlerThread线程,并启动之(HandlerThread线程是含有Looper的线程,详情见消息机制)。
step3.
onStart()方法,发送startId和intent给消息队列
step4.
这里就是接收消息,并调用onHandleIntent方法(一般这个方法定义我们执行任务的线程任务),任务完成后根据发消息回来的startId结束当前service
step5.
这里其实就是调用onStart方法,返回值用在服务被干掉自动恢复xxx(这里不太懂,用的也不多)
step6.
结束的时候顺便把消息线程结束,至此流程就结束了。
总结:综上分析,IntentService适合用在一次性任务,比如下载一张图片,一首歌等等,因为开启之后任务结束后service和线程会自动结束,我们只需要传数据就行了。
需要注意的是,在程序里面不要重复调用stopself,因为任务处理完会发送消息自动结束service。
说白了这个实现类只是普通的service+自动结束任务而已
相关文章推荐
- Canvas的save和restore
- Android实现步进式录像进度条
- android 相机与手电筒的互斥
- adb详解
- Android中调用Web Services
- adb详解
- Android RecyclerView 使用完全解析 体验艺术般的控件
- 小笔记 使android界面打开时EditText不自动获得焦点
- Android与服务器端数据交互
- Android library projects cannot be launched
- 安卓错误E/AndroidRuntime(4054):java.lang.NullPointerException
- 初识android vector drawable
- android屏幕适配方案 - dimen生成器
- RGB 颜色对照表
- Android 国际化 语言适配
- Android的任务和回退栈
- Android adb无法启动
- Android视频录制--MediaProjection
- Android Property Animation 属性动画
- Android Cursor类的概念和用法