转载请注明出处:http://blog.csdn.net/zhouli_csdn/article/details/45394745
Android官方文档说明此Service不受生命周期的影响,后台开启线程处理耗时任务。
IntentService使用的一些限制:
1.不能够直接和用户界面交互,必须发送到Activity。
2.请求是顺序执行的,如果此时已经有一个在运行,那么在发送请求将会在上一个请求执行完后才执行。
3.IntentService不能被中断。
创建一个IntentService:
public class RSSPullService extends IntentService {
@Override
protected void onHandleIntent(Intent workIntent) {
// Gets data from the incoming Intent
String dataString = workIntent.getDataString();
...
// Do work here, based on the contents of dataString
...
}
}
在配置文件中配置:
<application
android:icon="@drawable/icon"
android:label="@string/app_name">
...
<!--
Because android:exported is set to "false",
the service is only available to this app.
-->
<service
android:name=".RSSPullService"
android:exported="false"/>
...
<application/>
发送请求到后台服务:
mServiceIntent = new Intent(getActivity(), RSSPullService.class);
mServiceIntent.setData(Uri.parse(dataUrl));
// Starts the IntentService
getActivity().startService(mServiceIntent);
请求发送完成后,将会执行onHandleIntent方法,执行完毕后,如果没有下一个请求,然后自己结束service。
使用BroadcaReceiver发送结果到用户界面:
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);
IntentFilter mStatusIntentFilter = new IntentFilter(
Constants.BROADCAST_ACTION);
// Adds a data filter for the HTTP scheme
mStatusIntentFilter.addDataScheme("http");
DownloadStateReceiver mDownloadStateReceiver =
new DownloadStateReceiver();
// Registers the DownloadStateReceiver and its intent filters
LocalBroadcastManager.getInstance(this).registerReceiver(
mDownloadStateReceiver,
mStatusIntentFilter);