0
点赞
收藏
分享

微信扫一扫

IntentService解析

Python百事通 2021-10-09 阅读 84
随笔

通常我们在做后台操作的时候,需要启动一个service来执行任务,启动service通常是两种方式:

(1)startService,这种方式一旦启动,该service就一直在后台运行,与启动service的其他组件的生命周期没有关系。

(2)bindService,这种方式启动service,那么该service会与启动它的组件的生命周期绑定,比如用activity启动,那么activity销毁的时候,那么这个service也会销毁。

这里会有一个误解,很多人认为service可以用于做耗时操作,但是实际上,service中是不能做耗时操作的,如果我们想要做一些耗时操作,并且在任务执行完成后可以销毁服务,这个时候可以借助IntentService。

为什么说IntentService可以做耗时操作呢?我们看下源码。

@Override

public void onCreate() {

    super.onCreate();

    HandlerThread thread =new HandlerThread("IntentService[" +mName +"]");

    thread.start();

    mServiceLooper = thread.getLooper();

    mServiceHandler =new ServiceHandler(mServiceLooper);

}

在oncreate方法中,会创建一个HandlerThread,这个HandlerThread实质上就是一个线程,只不过在他内部维护了一个Handler,我们要做的耗时操作主要是在这个Thread中进行,并且HandlerThread内部会维护一台Handler机制,mServiceLooper就是该Thread中包含的looper,然后将这个looper放入serviceHandler的构造函数中,

private final class ServiceHandlerextends Handler {

public ServiceHandler(Looper looper) {

super(looper);

    }

@Override

    public void handleMessage(Message msg) {

         onHandleIntent((Intent)msg.obj);

        stopSelf(msg.arg1);

    }

}

耗时操作交给HandlerThread后,经过其内部的Handler调度,会传递给ServiceHandler的回调handleMessage()中,在handleMessage方法中,有两个重要操作,一个是onHandleIntent()来处理msg传递过来的耗时操作,另一个操作就是stopSelf()方法将服务终止。

所以IntentService就适合处理这种耗时操作,并且在操作结束后会结束自身,防止资源的占用。

举报

相关推荐

0 条评论