继承IntentService比继承Service更好

Android 2017-08-19

用IntentService比Service更好,因为这里提供了一个异步的,可以自动停止的服务,否则我们需要在Serivce子类中的onStartCommand方法中手动开启子线程,并且在最后要调用stopSelf()方法。

新建一个 MyIntentService 类继承自 IntentService,代码如下所示:

public class MyIntentService extends IntentService {
          public MyIntentService() {
              super("MyIntentService"); // 调用父类的有参构造函数
          }
          @Override
          protected void onHandleIntent(Intent intent) {
// 打印当前线程的id
              Log.d("MyIntentService", "Thread id is " + Thread.currentThread().
                      getId());//可以看见是另一个子线程
          }
          @Override
          public void onDestroy() {
              super.onDestroy();
              Log.d("MyIntentService", "onDestroy executed");
          }
      }

这里首先是要提供一个无参的构造函数,并且必须在其内部调用父类的有参构造函数。
然后要在子类中去实现 onHandleIntent()这个抽象方法,在这个方法中可以去处理一些具体的
逻辑,而且不用担心 ANR 的问题,因为这个方法已经是在子线程中运行的了。这里为了证
实一下,我们在 onHandleIntent()方法中打印了当前线程的 id。另外根据 IntentService 的特性,
这个服务在运行结束后应该是会自动停止的,所以我们又重写了 onDestroy()方法,在这里也
打印了一行日志,以证实服务是不是停止掉了。

IntentService的使用方法和普通的Service没有什么区别。


本文由 方方無 创作,采用 知识共享署名 3.0,可自由转载、引用,但需署名作者且注明文章出处。

还不快抢沙发

添加新评论

shijiebei 365bet manbetx 188bet xinshui caipiao 95zz tongbaoyule beplay 88bifa 18luck betway bwin hg0088 aomenjinshayulecheng ca88 shenbotaiyangcheng vwin w88 weide