美文网首页Android面试相关Android面试系列Android开发经验谈
Android面试(八):异步消息机制之IntentServic

Android面试(八):异步消息机制之IntentServic

作者: zhang_pan | 来源:发表于2018-02-11 20:43 被阅读72次

    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面试(八):异步消息机制之IntentServic

        本文链接:https://www.haomeiwen.com/subject/oeynzxtx.html