前言
IntentService
本质上也属于 Service
,它可以说是一个使用起来更为简单的 Service
。在我们基本的 Service
使用过程中,我们需要在 Service
中自己开启子线程进行耗时操作,并且在 Service
执行结束后还要调用 stopSelf
或 stopService
方法来关闭 Service
,而使用 IntentService
的话,这些问题将通通不需要关注。因为 IntentService
内部就是默认执行在子线程中的,并且在执行结束后它会帮我们自动停止 Service
。
在学习本章知识的时候,你需要先知晓以下知识点:
如果你对这两块知识点还不够熟悉的话,可以点击上面的超链接进行学习,那么接下来就让我们开始 IntentService
的学习吧,首先我们学习一下它的使用。
IntentService 的使用
IntentService
的使用和 Service
非常的相似,也比 Service
更加简单,我们接下来创建一个 MyIntentService
类,并继承自 IntentService
。它的代码如下:
public class MyIntentService extends IntentService {
private static final String TAG = MyIntentService.class.getSimpleName();
public MyIntentService() {
super("MyIntentService");
}
@Override
public void onCreate() {
super.onCreate();
Log.d(TAG,"onCreate");
}
@Override
protected void onHandleIntent(@Nullable Intent intent) {
Log.d(TAG, "onHandleIntent's thread: " + Thread.currentThread());
}
@Override
public void onDestroy() {
super.onDestroy();
Log.d(TAG, "onDestroy");
}
}
我们对里面的 3 个生命周期中的方法进行重写,它们分别是 onCreate
、onHandleIntent
和 onDestroy
。如果你之前学习过 Service
的话,对 onCreate
和 onDestroy
应当是相当熟悉的了,它们就是分别对应于 IntentService
启动时和停止时的方法。而 onHandleIntent
则比较陌生了,其实这个方法就是我们在 IntentService
中执行主要逻辑的方法,它默认是运行在子线程中的。这里我们对这 3 个方法只是简单地打印 Log
,特别的我们会打印出 onHandleIntent
的线程,验证它是否真的运行在子线程中。
接下来我们就为 MainActivity
中添加一个按钮,通过按钮来调用 startService
方法来启动我们的 IntentService
,代码如下:
public class MainActivity extends AppCompatActivity implements View.OnClickListener{
private Button startServiceBtn;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanc