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这个就比较容易看懂。