Android面试(八):异步消息机制之IntentService面试你所需知道的一切

1. IntentService是什么?

  1. IntentService是继承并处理异步请求的一个类,在IntentService内有一个工作线程来处理耗时操作,启动IntentService的方式和启动传统的Service一样,同时,当任务执行完后,IntentService会自动停止,而不需要我们手动去控制或调用stopSelf()。另外,可以启动IntentService多次,而每一个耗时操作会以工作队列的方式在IntentService的onHandleIntent回调方法中执行,并且,每次只会执行一个工作线程,执行完第一个再执行第二个。
  2. 它本质上是一种特殊的Service,继承自Service并且本身就是一个抽象类。
  3. 它内部通过HandlerThread和Handler实现异步操作。

2. IntentService使用方法:

创建IntentService时,只需实现onHandleIntent和构造方法,onHandleIntent为异步方法,可以执行耗时操作。

3. IntentService的机制原理:

它本质上就是一个封装了HandlerThread和Handler的异步框架。

IntentService继承于Service,在IntentService的onCreate方法中,创建了HandlerThread,并实例化了一个Handler子类对象ServiceHandler,传入的Looper是HandlerThread这个线程的Looper,这也是为什么IntentService可以处理耗时操作的原因:

public void onCreate() {
     super.onCreate();
     HandlerThread thread = new HandlerThread("IntentService[" + mName + "]");
     thread.start();
     mServiceLooper = thread.getLooper();
     mServiceHandler = new ServiceHandler(mServiceLooper);
}

在onStart中发送消息:

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

Handler的handleMessage处理消息,回调onHandlerIntent方法,并关闭IntentService:

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的源码就基本上看完了,IntentService无非就是封装了HandlerThread和Handler的异步框架,看完这些,是不是感觉很简单呢!!!

喜欢本篇博客的简友们,就请来一波点赞,您的每一次关注,将成为我前进的动力,谢谢!

你可能感兴趣的:(Android面试(八):异步消息机制之IntentService面试你所需知道的一切)