IntentService的简单描述
来源:互联网 发布:mac 放大图片 编辑:程序博客网 时间:2024/05/17 09:03
IntentService is a base class for Services that handle asynchronous requests (expressed as Intents) on demand. Clients send requests through android.content.Context.startService(Intent) calls; the service is started as needed, handles each Intent in turn using a worker thread, and stops itself when it runs out of work.
This "work queue processor" pattern is commonly used to offload tasks from an application's main thread. The IntentService class exists to simplify this pattern and take care of the mechanics. To use it, extend IntentService and implement onHandleIntent(Intent). IntentService will receive the Intents, launch a worker thread, and stop the service as appropriate.
All requests are handled on a single worker thread -- they may take as long as necessary (and will not block the application's main loop), but only one request will be processed at a time.
This "work queue processor" pattern is commonly used to offload tasks from an application's main thread. The IntentService class exists to simplify this pattern and take care of the mechanics. To use it, extend IntentService and implement onHandleIntent(Intent). IntentService will receive the Intents, launch a worker thread, and stop the service as appropriate.
All requests are handled on a single worker thread -- they may take as long as necessary (and will not block the application's main loop), but only one request will be processed at a time.
下面是要分析的源码:
public abstract class IntentService extends Service {
private volatile Looper mServiceLooper;
private volatile ServiceHandler mServiceHandler;
private String mName;
private boolean mRedelivery;
private final class ServiceHandler extends Handler {
public ServiceHandler(Looper looper) {
super(looper);
}
@Override
public void handleMessage(Message msg) {
onHandleIntent((Intent)msg.obj);
stopSelf(msg.arg1);
}
}
private volatile Looper mServiceLooper;
private volatile ServiceHandler mServiceHandler;
private String mName;
private boolean mRedelivery;
private final class ServiceHandler extends Handler {
public ServiceHandler(Looper looper) {
super(looper);
}
@Override
public void handleMessage(Message msg) {
onHandleIntent((Intent)msg.obj);
stopSelf(msg.arg1);
}
}
IntentService 实际上是Looper,Handler,Service 的集合体,他不仅有服务的功能,还有处理和循环消息的功能.
下面是onCreate()的源码:
@Override
public void onCreate() {
super.onCreate();
HandlerThread thread = new HandlerThread("IntentService[" + mName + "]");
thread.start();
mServiceLooper = thread.getLooper();
mServiceHandler = new ServiceHandler(mServiceLooper);
}
public void onCreate() {
super.onCreate();
HandlerThread thread = new HandlerThread("IntentService[" + mName + "]");
thread.start();
mServiceLooper = thread.getLooper();
mServiceHandler = new ServiceHandler(mServiceLooper);
}
下面是onStart()的源码:
@Override
public void onStart(Intent intent, int startId) {
Message msg = mServiceHandler.obtainMessage();
msg.arg1 = startId;
msg.obj = intent;
mServiceHandler.sendMessage(msg);
}
public void onStart(Intent intent, int startId) {
Message msg = mServiceHandler.obtainMessage();
msg.arg1 = startId;
msg.obj = intent;
mServiceHandler.sendMessage(msg);
}
@Override
public void handleMessage(Message msg) {
onHandleIntent((Intent)msg.obj);
stopSelf(msg.arg1);
}
public void handleMessage(Message msg) {
onHandleIntent((Intent)msg.obj);
stopSelf(msg.arg1);
}
当所有的工作执行完后:就会执行onDestroy方法,源码如下:
@Override
public void onDestroy() {
mServiceLooper.quit();
}
public void onDestroy() {
mServiceLooper.quit();
}
通过对源码的分析得出:
这是一个基于消息的服务,每次启动该服务并不是马上处理你的工作,而是首先会创建对应的Looper,Handler并且在MessageQueue中添加的附带客户Intent的Message对象,当Looper发现有Message的时候接着得到Intent对象通过在onHandleIntent((Intent)msg.obj)中调用你的处理程序.处理完后即会停止自己的服务.意思是Intent的生命周期跟你的处理的任务是一致的.所以这个类用下载任务中非常好,下载任务结束后服务自身就会结束退出.
0 0
- IntentService的简单描述
- IntentService的简单用法
- IntentService的最简单实现
- jetspeed的简单描述
- 算法的简单描述
- Hadoop 的简单描述
- prince2的简单描述
- intentservice 简单使用
- IntentService简单分析
- android IntentService 简单介绍
- Android IntentService 简单使用
- StartedService与BoundService 以及IntentService的简单使用
- 一个简单的Android Service实例,包括:bindService、IntentService
- 路由原理的简单描述
- 类图-细节的简单描述
- servlet生命周期的简单描述
- IOS文件系统的简单描述
- shuffle过程的简单描述
- 正则表达式工具集合
- mac os 中制作u盘启动盘
- gcc编译器的使用
- AngularJS 单路由多视图(Multiple Named Views)
- mysql 5.7.10使用dbforget Studio 连接异常
- IntentService的简单描述
- Web项目中 .classpath、.mymetadata、.project文件的作用
- 使用MulticastSocket实现多点广播(实现多人聊天室)
- 闭包
- Xcode8 打包app上传到iTunes Connect 但显示构建版本无效
- 如何通过经纬度粗略计算地球两点之间的距离?直接上代码
- 如何设计一个秒杀系统
- IntelliJ DataGrip Oracl 11g远程连接
- android中的样式和主题(styles和theme)