Android之IntentService源码浅析

来源:互联网 发布:python接收json数据 编辑:程序博客网 时间:2024/05/21 17:46
前言:我们知道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+自动结束任务而已
0 0
原创粉丝点击