轉載請註明出處: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);