前面我们有提过,Service可以让我们的Android程序在后台执行一些代码。这样可以不影响用户做其他操作的同时还可以执行我们的代码程序,比如播放音乐。但我们也知道,Service是执行在主线程当中的。所以当我们需要执行一些耗时操作,比如网络请求,比如图片上传压缩,那么我们就需要在Service中开启一个子线程。不过Android中已经为我们提供了一个包装好的可以执行耗时操作的Service,那便是IntentService。
首先我们要有一个IntentService,编写如下:
public class MyIntentService extends IntentService {
public MyIntentService() {
super("com.hao.seekbar.MyIntentService");
}
@Override
public int onStartCommand(@Nullable Intent intent, int flags, int startId) {
return super.onStartCommand(intent, flags, startId);
}
@Override
protected void onHandleIntent(@Nullable Intent intent) {
try {
Thread.sleep(3000);
EventBus.getDefault().post("完成了");
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
这里要注意几点
- 我们的IntentService的构造方法一定是无参的,默认出来的要带一个参数,删掉。
- onStartCommand执行在主线程,onHandleIntent执行在子线程。
- 当我们子线程执行完毕后,我们可以通过EventBus或者本地广播来告知界面的主线程我们的耗时任务执行完毕。