android intentService

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


你可能感兴趣的:(andorid,IntentService)