安卓开发:服务的更多技巧--2.使用IntentService

来源:互联网 发布:卡通农场 挂机软件 编辑:程序博客网 时间:2024/05/22 05:00

服务中的代码都是默认运行在主线程当中的,如果直接在服务里去处理一些耗时的逻辑,就很容易出现ANR(Application Not Responding)的情况。Android专门提供了一个IntentService类,可以很好的解决问题。

新建一个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()方法,这里打印了一行日志,以证实服务是否停止。

运行结果如下:

这里写图片描述

注:文章采摘自《第一行代码》

0 0