前言:
IntentService算是service中比较重要的一个类,而且就100行代码!今天一起阅读它的源码和注释。
成员变量(4个):
mServiceLooper: Looper 与线程关联的Looper
mServiceHandler: ServiceHandler 自定义Handler子类,会在handlerMessage中调用onHandleIntent;
mName: String 线程名,一般debugging用到
mRedelivery: boolean
| mRedelivery(boolean ) | true | false |
| onStartCommand(method) | START_REDELIVER_INTENT | START_NO_STICK |
| onHandleIntent结束前process dies的策略 | 重启进程 | 不会重启,intent也会一起死 |
内部类的Handler:
private final class ServiceHandler extends Handler {
public ServiceHandler(Looper looper) {
super(looper);
}
@Override
public void handleMessage(Message msg) {
onHandleIntent((Intent)msg.obj); // 调用抽象 onHandleIntent方法
stopSelf(msg.arg1); // 完成服务后自动结束service,不用开发者调用
}
}
方法:
protected abstract void onHandleIntent(@Nullable Intent intent); // 想要执行的方法
// 初始化内容
@Override
public void onCreate() {
super.onCreate();
HandlerThread thread = new HandlerThread("IntentService[" + mName + "]");
thread.start();
mServiceLooper = thread.getLooper();
mServiceHandler = new ServiceHandler(mServiceLooper);
}
// 从message池中取出数据来处理
@Override
public void onStart(@Nullable Intent intent, int startId) {
Message msg = mServiceHandler.obtainMessage();
msg.arg1 = startId;
msg.obj = intent;
mServiceHandler.sendMessage(msg);
}
@Override
public int onStartCommand(@Nullable Intent intent, int flags, int startId) {
onStart(intent, startId);
return mRedelivery ? START_REDELIVER_INTENT : START_NOT_STICKY;
}
@Override
public void onDestroy() {
mServiceLooper.quit();
}
本文详细解析了Android中IntentService的实现原理,包括其成员变量的功能介绍、内部Handler的使用方式以及关键方法如onCreate、onStartCommand的运作流程。
657

被折叠的 条评论
为什么被折叠?



