IntentService基础知识
2021-07-05 本文已影响0人
纳兰沫
处理异步请求 实现多线程
1.使用场景
线程任务 需按顺序 在后台执行
最常见的场景:离线下载
不符合多个数据同时请求的场景:所有的任务都在同一个Thread looper里执行
2.使用步骤
1.定义IntentService的子类 复写onHandleIntent() 方法
class myIntentService extends IntentService {
public myIntentService() {
super("myIntentService");
}
//根据Intent实现耗时操作
@Override
protected void onHandleIntent(@Nullable Intent intent) {
String taskName = intent.getExtras().getString("taskName");
switch (taskName) {
case "task1":
Log.d("myIntentService","do task1");
break;
case "task2":
Log.d("myIntentService","do task2");
break;
default:
break;
}
}
@Override
public void onCreate() {
super.onCreate();
}
//重写onStartCommand() 方法
//默认实现 = 将请求的Intent添加到工作队列
@Override
public int onStartCommand(@Nullable Intent intent, int flags, int startId) {
return super.onStartCommand(intent, flags, startId);
}
}
2.在Manifest.xml中注册服务
<service android:name=".myIntentService" >
<intent-filter>
<action android:name="cm.sc.ff" />
</intent-filter>
</service>
3.在Activity中开启service服务
void startService () {
//同一个服务只会开启1个工作线程
Intent i = new Intent("cn.scu.finch");
Bundle bundle = new Bundle();
bundle.putString("taskName","task1");
i.putExtras(bundle);
startService(i);
Intent i2 = new Intent("cn.scu.finch");
Bundle bundle2 = new Bundle();
bundle2.putString("taskName","task2");
i2.putExtras(bundle2);
startService(i2);
}