IntentService作用
在一个服务中开启一个子线程,处理异步事件,处理完只有关闭自己
IntentService原理
IntentService是抽象类继承自Service,首先我们要继承IntentService,并且复写onHandleIntent()方法,Service会在处理完这个这个复写的方法后关闭自己
首先看在创建时的onCreate方法
@Override
public void onCreate() {
super.onCreate();
HandlerThread thread = new HandlerThread("IntentService[" + mName + "]");
thread.start();
mServiceLooper = thread.getLooper();
mServiceHandler = new ServiceHandler(mServiceLooper);
}
这里会创建一个HandlerThread用于处理异步事件,onCreate中主要就是准备HandlerThread和用于处理异步的Handler
@Override
public void onStart(@Nullable Intent intent, int startId) {
Message msg = mServiceHandler.obtainMessage();
msg.arg1 = startId;
msg.obj = intent;
mServiceHandler.sendMessage(msg);
}
onStart方法会创建Message然后通过子线程创建的Handler去发送消息,我们在来看消息处理做了什么
private final class ServiceHandler extends Handler {
...
@Override
public void handleMessage(Message msg) {
onHandleIntent((Intent)msg.obj);
stopSelf(msg.arg1);
}
}
handleMassage处理子线程消息,调用抽象方法,也就是子类复写的方法,然后关闭自己
@Override
public void onDestroy() {
mServiceLooper.quit();
}
关闭自己的时候会调用Looper的quit()方法
IntentService使用
public class MyIntentService extends IntentService{
public MyIntentService(String name) {
super(name);
}
public MyIntentService() {
this("MyIntentService");
}
@Override
public int onStartCommand(@Nullable Intent intent, int flags, int startId) {
LogUtils.log("服务开始了");
return super.onStartCommand(intent, flags, startId);
}
@Override
protected void onHandleIntent(@Nullable Intent intent) {
LogUtils.log("处理我自己的事");
}
@Override
public void onDestroy() {
super.onDestroy();
LogUtils.log("服务结束了");
}
}
1,继承IntentService,复写onHandleIntent方法,
2,然后在清单文件中注册服务
<service android:name=".handle_thread.MyIntentService"/>
3,启动服务
Intent intent = new Intent(this,MyIntentService.class);
startService(intent);