您的位置:首页 > 移动开发 > Android开发

Android之Service(六):使用IntentService

2016-06-15 16:34 483 查看

为什么要使用IntentService?

服务中的代码都是默认运行在主线程当中的,如果直接在服务里去处理一些耗时的逻辑,就很容易出现ANR(Application Not Responding)的情况。所以这个时候就需要用到Android多线程编程技术,应该在服务的每个具体的方法里开启一个子线程,然后在这里去处理那些耗时的逻辑。因此,一个比较标准的服务就可以写成如下形式:

public class MyService extends Service {

@Override
public IBinder onBind(Intent intent) {
return null;
}

@Override
public int onStartCommand(Intent intent, int flags, int startId) {
new Thread(new Runnable() {
@Override
public void run() {
//处理具体的逻辑
stopSelf();  //执行完任务后自行关闭服务
}
}).start();
return super.onStartCommand(intent, flags, startId);
}
}


虽说这种写法并不复杂,但是总会有一些程序员忘记开启线程,或者忘记调用stopSelf()方法。为了可以简单地创建一个异步的、会自动停止的服务,Android专门提供了一个IntentService类,这个类就很好地解决了前面所提到的两种尴尬。

IntentService的用法

public class MyIntentService extends IntentService {

public MyIntentService() {
//调用父类的有参构造函数
super("MyIntentService");
}

@Override
protected void onHandleIntent(Intent intent) {
//处理具体的逻辑
}

@Override
public void onDestroy() {
super.onDestroy();
}
}


这里首先是要提供一个无参的构造函数,并且必须在其内部调用父类的有参构造函数。然后要在子类中去实现
onHandleIntent()
这个抽象方法,在这个方法中可以去处理一些具体的逻辑,而且不用担心ANR的问题,因为这个方法已经是在子线程中运行的了。另外根据IntentService的特性,这个服务在运行结束后是会自动停止的。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  android