Android最佳实践之后台作业

原文链接

这些课程向你展示了如何通过把作业运行在后台来提高你的应用的性能和最小化电池消耗。

1.运行在一个后台服务中

除非你特别指定,否则你在应用中大部分的操作都是运行在一个称之为UI线程的前端线程中。这个会导致一系列问题,由于长时间的操作将会打扰到你的用户界面的响应性。这个会让你的用户感觉非常恼火,甚至会引起系统错误。为了避免这个,Android框架提供了几个类来帮忙我们把一部分的操作分担到另一个独立线程中。最有用的类是IntentService.

这节课描述了如何实现一个IntentService,向其发送工作请求,以及把其运行的结果反馈到其他的组件。

1.1 创建一个后台服务

IntentService类提供一个在单个后台线程运行一个操作的直观的结构。这个使得它能够处理长时间的操作而不影响到用户界面的响应性。同样,IntentService也不会受到大多数用户界面生命周期事件的影响,所以它会在关闭一个AsyncTask的情况下继续运行。

一个IntentService有几个限制:

  • 它不能直接与你的用户界面进行交互。你必须把数据发送到Activity中,由Activity处理数据。
  • 工作请求是串行执行。如果一个操作正在IntentService中运行,这个时候你又发了另外一个请求,此时这个请求会一直等待到第一个请求结束。
  • 运行在IntentService中的操作不能被中断
然而,在大多数情况下一个IntentService是用于执行一个简单的后台操作的值得推荐的方式。
这节课向你展示了如何创建你的IntentService的子类以及如何创建一个需要的回调方法onHandleIntent().最后,课程描述了如何在你的manifest文件中声明IntentService。

创建一个IntentServcie
为了给你的应用创建一个IntentService组件,你需要定义一个从IntentServcie继承下来的子类,并且在其中覆盖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方法是由IntentServcie方法自动调用。在一个IntentService中,你应该避免覆盖这些回调函数。
在Manifest文件中定义IntentServcie
一个IntentService需要在应用manifest中找到一个入口。提供这个入口的标签是<service>。
<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元素并没有包含一个Intent过滤器。Activity通过一个具体的Intent发送工作请求到Service中,所以并不需要过滤器。这个也意味着只有在同一个应用或者具有相同用户ID的其他应用可以访问这个Service.
现在你有了基本的IntentService类,你可以通过Intent发送工作请求到其中。我们将会在下一节课中描述如何构造这些对象来发送到IntentService中的程序。

2.在后台加载数据

3.管理设备的唤醒状态


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值