IntentService学习

IntentService是一个Service,主要就是Service和HandlerThread的结合

一、使用

就使用和Service差不多,但是比Service多个一个方法实现:

public class MyIntentService extends IntentService {
    
    /**
     * Creates an IntentService.  Invoked by your subclass's constructor.
     *
     * @param name Used to name the worker thread, important only for debugging.
     */
    public MyIntentService(String name) {
        super(name);
    }

    @Override
    protected void onHandleIntent(Intent intent) {

    }
}

onHandleIntent里面可以实现耗时的操作。

二、源码分析

    @Override
    public void onCreate() {
        ......
        super.onCreate();
        HandlerThread thread = new HandlerThread("IntentService[" + mName + "]");
        thread.start();

        mServiceLooper = thread.getLooper();
        mServiceHandler = new ServiceHandler(mServiceLooper);
    }

以上是IntentService的onCreate方法,从里面代码看出,类似我们之前学习HandlerThread的时候的例子-HandlerThread学习

其实就是在Service里面使用HandlerThread去做耗时任务。

    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);
        }
    }

    @Override
    public void onStart(@Nullable Intent intent, int startId) {
        Message msg = mServiceHandler.obtainMessage();
        msg.arg1 = startId;
        msg.obj = intent;
        mServiceHandler.sendMessage(msg);
    }

在Service启动的时候Handler会发出消息,之后ServiceHandler处理该消息,处理时会调用onHandleIntent抽象方法,实现的时候需要我们自己去添加相应的代码。

从上面的代码我们发现stopSelf(msg.arg1),那么这个Service执行完成异步时候就自动停止了,等着回收。

是不是很简单,理解了Handler,Looper,Message这个就比较容易看懂。

原文地址:https://www.cnblogs.com/doubleyoujs/p/7761200.html