本文用途:搜索、跟踪阅读进度、概括官方文档内容。
忽略介绍、原理、优缺点等内容。
Running in a Background Service
最有用: IntentService
流程:创建IntentService, 发送请求, 接收结果
Creating a Background Service 原文链接
1. 继承 IntentService
2.override onHandleIntent(Intent workIntent), 不用override其他callbacks 。执行任务的代码就在onHandleIntent()中。
3、添加<service>至<application>
IntentService内部有一个线程、IntentService可以相应多个请求(有队列,逐个完成)、执行完后自动停止。
Sending Work Requests to the Background Service 原文链接
1、创建explicit intent 2、startService()
Reporting Work Status
原文链接 涉及LocalBroadcastManager类
1)IntentService发送结果:1、创建Intent(可自行指定action, data uri) 2、用LocalBroadcastManager发送该intent( sendBroadcast() )
public class RSSPullService extends IntentService {
...
/*
* Creates a new Intent containing a Uri object
* BROADCAST_ACTION is a custom Intent action
*/
Intent localIntent =
new Intent(Constants.BROADCAST_ACTION)
// Puts the status into the Intent
.putExtra(Constants.EXTENDED_DATA_STATUS, status);
// Broadcasts the Intent to receivers in this app.
LocalBroadcastManager.getInstance(this).sendBroadcast(localIntent);
...
}
2)接收结果:1、继承BroadcastReceiver 2、override onReceive() 3、新建 IntentFilter(可多个,不继承) 4、注册(下面)
// Broadcast receiver for receiving status updates from the IntentService
private class ResponseReceiver extends BroadcastReceiver
{
// Prevents instantiation
private DownloadStateReceiver() { }
// Called when the BroadcastReceiver gets an Intent it's registered to receive
@Override
public void onReceive(Context context, Intent intent) {
...
//Handle Intents here.
...
}
}
4、注册receiver和intent filter:
// Instantiates a new DownloadStateReceiver
DownloadStateReceiver mDownloadStateReceiver =
new DownloadStateReceiver();
// Registers the DownloadStateReceiver and its intent filters
LocalBroadcastManager.getInstance(this).registerReceiver(
mDownloadStateReceiver,
mStatusIntentFilter);
...
注:receiver和intent filter有多种组合,多次调用 registerReceiver() 即可(每次不同组合)。
接收到intent后,不要start activity。