您的位置:首页 > 移动开发 > Android开发

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+自动结束任务而已
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: