转载请注明出处: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);