区别
Service
不是运行在独立的线程,所以不建议在Service中编写耗时的逻辑和操作,否则会引起ANR。
IntentService
① 可用于执行后台耗时的任务,任务执行后会自动停止。
② 具有高优先级,适合高优先级的后台任务,且不容易被系统杀死。
③ 可以多次启动,每个耗时操作都会以工作队列的方式在IntentService的onHandleIntent()回调方法中执行。
IntentService的使用
//新建一个类继承IntentService,并实现下面两个方法
public class MyIntentService extends IntentService {
public MyIntentService(String name) {
super(name);
}
@Override
protected void onHandleIntent(@Nullable Intent intent) {
//在这个方法做自己想做的事情
}
}
源码分析
为什么IntentService可用于执行后台耗时的任务,任务执行后会自动停止
IntentService继承与Service,我们来看IntentService的onCreate()方法
@Override
public void onCreate() {
// TODO: It would be nice to have an option to hold a partial wakelock
// during processing, and to have a static startService(Context, Intent)
// method that would launch the service & hand off a wakelock.
super.onCreate();
//首先新建一个子线程并启动
HandlerThread thread = new HandlerThread(