IntentService源码解析

前言:

IntentService算是service中比较重要的一个类,而且就100行代码!今天一起阅读它的源码和注释。

成员变量(4个):

mServiceLooper: Looper 与线程关联的Looper

mServiceHandler:  ServiceHandler 自定义Handler子类,会在handlerMessage中调用onHandleIntent;

mName: String 线程名,一般debugging用到

mRedelivery: boolean

mRedelivery(boolean )truefalse
onStartCommand(method)START_REDELIVER_INTENTSTART_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();
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值