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+自动结束任务而已
正文:
思路是启动顺序来分析,分别是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
- Android之IntentService源码浅析
- 读IntentService、HandlerThread源码之浅析
- Android源码解析之(五)-->IntentService
- Android之IntentService使用及源码分析
- Android源码基础解析之IntentService
- Android IntentService源码解读
- Android IntentService 源码解析
- android-----IntentService源码分析
- Android IntentService源码解析
- Android IntentService源码分析
- <Android源码>IntentService源码解析
- 《android framework常用api源码分析》之IntentService意图服务
- Android之日历源码浅析
- Android之EventBus源码浅析
- Android之IntentService
- android之IntentService
- Android 之IntentService学习
- android之intentservice
- UVA 1610 - Party Games
- 配置子目录Web.config使其消除继承,用虚拟目录创建多个网站的方法
- MFC ComBox组合控件框
- Tomcat内存、连接数等性能参数设置
- QT 不能在指定目录生成目标文件
- Android之IntentService源码浅析
- linux下diff、patch制作补丁
- Intellij IDEA+nodejs router没有post方法
- django bootstrap3
- STL各种排序
- MYSQL 开发实用知识集合
- JSON解析详解
- 【.Net码农】ASP.NET支持多语言
- jQuery select年月日(生日)选择器