为什么使用IntentService
我们知道Service的代码默认是运行在主线程之中的,如果在service中处理一些比较耗时的操作,就很容易出现ANR的情况,所以这时候就需要让这些耗时的工作放在子线程中。而我们往往又希望服务执行完后可以自动停下来,那么我们创建的服务就会像这样:
public class MyService extends Service{
@Override
public IBinder onBind(Intent intent){
return null;
}
@Override
public void onStartCommand(Intent intent,int flags,int startId){
new Thread(new Runnable{
@Override
public void run(){
//这里处理耗时逻辑
stopself(); //执行后停下来
}
}).start();
return super.onStartCommand(intent,flags,startId);
}
}
那么有没有更简单的更方便的方法让创建一个异步,会自动停止的服务呢? 答案是IntentService。
使用IntentService
IntentService需要调用其父类的构造函数,然后在其子类中实现onHandleIntent()这个抽象方法,该方法运行在子线程中。最后还需要在AndroidmMainfest.xml中注册IntentService。
public class MyIntentService extends IntentService{
public MyIntentService(){
super("MyIntentService");
}
@Override
protected void onHandleIntent(Intent intent){
//该函数的逻辑已经在子线程中运行了,可以处理一些耗时逻辑,而不用担心ANR
}
@Override
public void onDestroy(){
super.onDestroy();
}
}