开启处理耗时操作的方法--IntentService
一、概述
能解决的问题:
当一个任务分为多个小任务,这些小任务必须按照一定顺序来执行,而且这些任务可能会比较耗时
为什么选择这个方法:
利用这个方法无需手动控制线程的执行顺序
如果是一个后台任务,交给Service去执行,因为Service中也不能执行耗时操作,所以还是需要开启子线程开执行,使用这个方法就可以忽略这个问题
当任务执行完毕后会自动关闭服务
从Activity中发送Intent之后就可以丢给后台去处理,就算当前的Activity被finish掉也不会影响任务的执行
IntentService是一个基本类,用来处理异步请求(用Intents来传递的)的服务。客户端通过调用startService(Intent)来发送请求;当需要的时候service被启动,使用一个工作者线程来依次处理每一个Intent;当任务运行完毕之后会自动关闭。
这个“工作队列处理器”模式通常用来帮助处理应用的主线程中的任务。IntentService类是为了简化这个模式和照看结构而存在的。通过继承IntentService实现onHandleIntent(Intent)方法来使用它。IntentService将会接收Intents,创建一个工作者线程,并在适当的时候(任务结束的时候)停止服务。
所有的请求都被一个单独的工作者线程处理--他们或许需要足够长的时间来处理(并且不会阻塞应用的主循环),但是同一时间只能处理一个请求
三、IntentService的使用方法
当然到了最关心的了--用法
创建一个类,继承IntentService,注意的是这里需要写一个无参的构造方法,不然会报错
public classHandleTaskServiceextendsIntentService {// 继承自父类的方法 public HandleTaskService(String name) { super(name); } // 注:这里要添加 public HandleTaskService(){ super("HandleTaskService"); } }
实现最关键的处理方法
@OverrideprotectedvoidonHandleIntent(Intent intent){ // 这里写你的代码处理逻辑 }
IntentService继承自Service,所以同样需要到AndroidManifest.xml中去注册
<service android:name="com.hanvon.inputmethod.callaime.util.HandleTaskService" ></service>
调用方式:
Intent intent = new Intent(this, HandleTaskService.class); intent.addFlags(101); intent.putExtra("content", content); startService(intent);
共同学习,写下你的评论
评论加载中...
作者其他优质文章