天天看点

IntentService源码

IntentService继承自Service,在onCreate方法中创建HandlerThread并启动线程,利用HandlerThread在子线程中的Looper生成一个在子线程中工作的ServiceHandler

HandlerThread thread = new HandlerThread("IntentService[" + mName + "]");
    thread.start();
    mServiceLooper =thread.getLooper();
    mServiceHandler =new ServiceHandler(mServiceLooper);
           

在ServiceHandler的handleMessage中调用方法处理耗时任务

public void handleMessage(Message msg) {
        onHandleIntent((Intent) msg.obj);
        stopSelf(msg.arg1);
    }
           

在onStart和onStartCommand函数中会向ServiceHandler中发送消息,开始耗时任务处理

Message msg = mServiceHandler.obtainMessage();
    msg.arg1 =startId;
    msg.obj =intent;
    mServiceHandler.sendMessage(msg);
           

在onDestory方法中结束Loop循环

public void onDestroy() {
        mServiceLooper.quit();
    }