概要
IntentService类提供用于在单个后台线程中运行的操作的简单的结构。这允许它处理长时间运行的操作,而不会影响用户界面的响应。此外,一个 IntentService不受大多数用户界面生命周期事件的影响,所以它会继续运行在会关闭一个AsyncTask
一个IntentService有一些限制:
- 它不能直接与您的用户界面进行交互。要将其结果放入UI中,您必须将它们发送给用户Activity。
- 工作请求按顺序运行。如果某个操作正在运行 IntentService,并且您发送了另一个请求,则该请求会一直等到第一个操作完成。
- 在一个运行的操作IntentService不能被中断。
但是,在大多数情况下,an IntentService是执行简单后台操作的首选方式。
本课向您展示如何创建自己的子类IntentService。该课程还向您展示了如何创建所需的回调方法 onHandleIntent()。最后,课程介绍了如何IntentService在清单文件中定义清单。
处理传入的意图
要IntentService为您的应用创建组件,请定义一个扩展的类IntentService,并在其中定义一个覆盖的方法onHandleIntent()。例如:
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
...
}
}
请注意,常规Service组件的其他回调,例如 onStartCommand()自动调用 IntentService。在一个IntentService,你应该避免重写这些回调。
要了解有关创建的更多信息IntentService,请参阅扩展IntentService类。
在清单中定义意图服务
一个IntentService还需要在您的应用程序清单中的条目。将此条目提供为 <service> 元素的子 <application>元素:
<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/>
该属性android:name指定了类的名称 IntentService。
注意该 <service> 元素不包含 意图过滤器。在 Activity发送工作请求到该服务使用一个明确的Intent,所以不需要过滤器。这也意味着只有具有相同用户ID的同一应用程序或其他应用程序中的组件才能访问该服务。
现在您已经拥有了基本IntentService类,您可以使用Intent对象向其发送工作请求。IntentService下一课将介绍构建这些对象并将它们发送给您的过程。
Lastest Update:2018.04.24
联系我
QQ:94297366
微信打赏:https://pan.baidu.com/s/1dSBXk3eFZu3mAMkw3xu9KQ
公众号推荐: