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的异步框架,看完这些,是不是感觉很简单呢!!!

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容