Android中的IntentService
首先说下,其他概念:Android中的本地服务与远程服务是什么?
本地服务:LocalService 应用程序内部------startService
远程服务:RemoteService android系统的应用程序间 ---- bindService
它可以通过自己定义并暴露出来的接口进行程序操作。客户端建立一个到服务对象的连接,并通过那个连接来调用服务。连接以调用Context.bindService()方法建立,以调用 Context.unbindService()关闭。多个客户端可以绑定至同一个服务。如果服务此时还没有加载,bindService()会先加载它。可被其他应用程序复用,比如天气预报服务,其他应用程序不需要再写这样的服务,调用已有的即可。
而今天所要说的是IntentService,它是继承自Service的抽象类,Looper Handler Service的集合体,可处理异步请求。
IntentService是借助于消息队列实现的,所以任务的执行顺序就是一个queue的形式;
由于是单线程(一个工作线程),所以所有的任务需要排队执行,不适合大多数的多任务情况;(缺点)
避免了我们再去创建线程和管理service的结束工作; (优点)
-----用户只需重写onHandleIntent()方法即可,处理任务的操作写入该方法中,不需重新创建线程,打印线程ID可发现是独立的工作线程.
demo代码太简单,便于以后查看,如截图

IntentServiceTest.java自己写的类,继承IntentService,重写onHandleIntent()方法,并在其各个生命周期中打印log,运行效果如截图。

关于IntentService消息处理及Service服务停止,源码如下:
IntentService.java消息处理
private final class ServiceHandler extends Handler
{
@Override
public void handleMessage(Message msg)
{
onHandleIntent((Intent)msg.obj);
stopSelf(msg.arg1);
}
}
Service.java停止服务
public final void stopSelf(int startId) {
if (mActivityManager == null) {
return;
}
try {
mActivityManager.stopServiceToken(
new ComponentName(this, mClassName), mToken, startId);
} catch (RemoteException ex) {
}
}
由上述可知,IntentService在处理完任务后,会自动调用stopSelf(),因此:IntentService在处理完所有任务后会被关闭
//stopSelf()-->IActivityManager的stopServiceToken()[实际为ActivityManagerService]--->ActiveServices的stopServiceTokenLocked();真正的处理在stopServiceTokenLocked()中,仅当startId为最后一次请求的id时才真正close Service也在该方法中。
关于stopServiceToken执行原理:http://blog.csdn.net/cloudwu007/article/details/6914470
//ActivityManagerService:stopServiceToken当遇到请求stopService时,仅当startId为最后一次请求的id时才真正close Service.
//ActivityManagerService源码目录: frameworks\base\services\core\java\com\android\server\am\...
其他相关链接:
ActivityManagerService详细介绍: http://www.myexception.cn/android/1979452.html
Service相关:http://android.blog.51cto.com/268543/527314
最后,感谢上述链接的作者!并欢迎大家指正
Android中的IntentService的更多相关文章
- Android中使用IntentService运行后台任务
IntentService提供了一种在后台线程中运行任务的方式,适合处理运行时间较长的后台任务. 长处: (1)IntentService执行在单独的线程中.不会堵塞UI线程 (2)IntentSer ...
- android 中IntentService的作用及使用
IntentService是继承于Service并处理异步请求的一个类,在IntentService内有一个工作线程来处理耗时操作,启动IntentService的方式和启动传统Service一样,同 ...
- Android中Services之异步IntentService
IntentService:异步处理服务,新开一个线程:handlerThread在线程中发消息,然后接受处理完成后,会清理线程,并且关掉服务. IntentService有以下特点: (1) 它创 ...
- Android中IntentService与Service
Android中的Service是用于后台服务的,当应用程序被挂到后台的时候,问了保证应用某些组件仍然可以工作而引入了Service这个概念,那么这里面要强调的是Service不是独立的进程,也不是独 ...
- Android中Service(服务)详解
http://blog.csdn.net/ryantang03/article/details/7770939 Android中Service(服务)详解 标签: serviceandroidappl ...
- 在Android中使用并发来提高速度和性能
Android框架提供了很实用的异步处理类.然而它们中的大多数在一个单一的后台线程中排队.当你需要多个线程时你是怎么做的? 众所周知,UI更新发生在UI线程(也称为主线程).在主线程中的任何操作都会阻 ...
- android中的一些问题
1. Android dvm的进程和Linux的进程, 应用程序的进程是否为同一个概念 DVM指dalivk的虚拟机.每一个Android应用程序都在它自己的进程中运行,都拥有一个独立的Dalvik虚 ...
- 【转】Android中的内存管理--不错不错,避免使用枚举类型
原文网址:http://android-performance.com/android/2014/02/17/android-manage-memory.html 本文内容翻译自:http://dev ...
- Android中的数据存储
Android中的数据存储主要分为三种基本方法: 1.利用shared preferences存储一些轻量级的键值对数据. 2.传统文件系统. 3.利用SQLite的数据库管理系统. 对SharedP ...
随机推荐
- VS2008设置断点不命中
网上试了各种办法都不好使,最后想到要修复一下,其实只要重置一下开发环境就好了,具体方法如下: 开始 --> Microsoft Visual Studio 2008 --> Visual ...
- Git查看、删除、重命名远程分支和tag(转)
转:http://zengrong.net/post/1746.htm 这篇文章记录我在使用git的过程中碰到远程分支和tag的相关内容,提纲: 查看远程分支 删除远程分支和tag 删除不存在对应远程 ...
- OPENQUERY 无行返回 无数据返回 数据缺失
用SQL Server 2008 R2 的 Oracle Provider for OLE DB 链接Oracle . 在SQL Server中使用下面查询语句,没有数据返回 但是再PL/SQL中查找 ...
- tinymce整合struts2使用
在提交之前记得 instance.post(); 这个应付老师检查还是可以的,但是很详细的怎么具体使用,还是要去看官方文档. <%@ page language="java" ...
- geoserver使用curl发布 imagemosaic
1.//create workspace curl -v -u admin:geoserver -XPOST -H "Content-type: text/xml" -d ...
- 内核对TCP REUSEPORT的优化
Q&A 当有人问起我关于reuseport的一些事的时候,我们的对话基本如下:Q1:什么是reuseport?A1:reuseport是一种套接字复用机制,它允许你将多个套接字bind在同一个 ...
- KindleEditor上传文件报404
初步怀疑是iis配置的允许上传大小太小了,然后就修改了配置文件但是不起作用. 后来百度了下iis版本是7.5,然后就按照iis8 的配置: IIS8请求筛选模块被配置为拒绝超过请求内容长度,在&quo ...
- vim的撤销和恢复操作以及匹配当前单词操作
今天顺便看了一下vim的一点命令,记录一下 1.撤销上一次操作和恢复上一次操作: u → undo <C-r> → redo 2.搜索上一个单词和下一个单词 * 和 #: 匹配光标当前所在 ...
- tomcat集群实例重复执行
http://www.cnblogs.com/interdrp/p/3458882.html
- 大漠绑定测试工具-VB6
获取更新开始|版本:3.1652版 2016年12月27日|更新内容:1.取消自动更新错误的提示.\n\n友情提示:如网盘失效,请加QQ群(568073679)下载最新版|下载地址:http://ww ...