Using the Android Job Scheduler - 1504020504
Last updated
Was this helpful?
Last updated
Was this helpful?
视频发布时间
2014年6月25日
视频介绍
Using the new network scheduling and task manager APIs to efficiently use network resources and conserve power.
视频推介语
暂无,待补充。
翻译
润稿
终审
原始链接
中文字幕
翻译流水号
加入字幕组
Wallace4ever
點墨
--
1504020504
马修·威廉斯:嗨
我是来自Android云团队的马修
我要谈的是你的应用程序如何可以有效地使用
新的作业调度程序的API来利用平台资源
你们是很幸运的
那么 我们到底在这里做什么呢
我的意思是 这是YouTube
你可以看视频游戏录像或时尚秘诀
但是千万别走开
我要展示一种新的方式来处理执行
后台作业的方式 在某种程度上 这将提高电池的使用寿命
也能节约开发者的时间
那么是什么后台作业呢
答案是 有各种各样的不需要用户看到
而需要您的应用程序需要做的工作
例如周期性地访问网络 来上载的用户数据
或下载配置参数等
这些通常不需要及时地
反映给用户
例如 让我们考虑一个不会更新用户界面的
网络操作
我谈论的这种任务也自成体系
理解它的一种方法是 我们
通常对可以很容易地重构的执行逻辑很感兴趣
另一种去理解它的方式是了解一些运行你的任务所需的
一批参数
对于用户来说 你的数据库列表是
他们不关心的 或者用户请求的
联系人列表也已被上传
那么 为什么创建一个新的API
你可能想知道什么是我们的理念
只要有了Android 这些事就
似乎没有实现的可能
事实不完全是这样
就拿网络电话作为一个例子
这些都是在我们感兴趣的各项工作中
强有力的消耗者
应用程序通常会尽快地做他们 以让他们不再碍事
这导致在每个人都在随意地做自己的事情时的
不必要的无线电唤醒
再告诉你一点 来看看家居生活
我们可以编写定期上传数据的代码
同时不需要作业调度
大约有你可以做这两种方式
你可以使用一个处理程序 并发布推迟的消息
前提是如果期限足够小的话
但是如果用户或者系统杀死他们的应用程序时会发生什么
此时 你决定AlarmManager是会给你发送信息的
因为至少当闹钟响起时你会起床
现在的问题是 如果手机关机 你的闹钟也就不见了
所以你在自己的生意上卡住了
那么 如果在执行时间网络不可用又如何呢
那么你就需要处理这事并稍后再试
你必须注册使用一个广播接收器
所以当连接恢复时你会得到通知
我想你可以尝试写一个同步适配器
它可以为你解决这些一堆问题
这是一个极好的一段代码
但它不旨在被用于调度
抛开路线不谈 这将是一个烂摊子而且很难得到正确的结果
所以我们决定为你准备好它
我们已经采取了预先存在的功能
将其和新功能捆绑在一起 为你带来一个
不错的软件包
我们已经介绍了空闲模式的概念,一个时间窗口
在其间系统已确定的电话是未使用的
而且手机不太可能很快被打开
例如 当一个设备是空闲时让一个作业运行
并且也充电是可能发生在夜间
那是用户进入梦乡 旁边插着他们的电话
我们所做的第二件事是将它
与新的系统API紧密结合 这样它会在网络处于活动状态时
通知客户
这意味着 与载体的握手已经发生了
所以 当我们批你的应用程序的网络调用的跟踪时
它会绕过需要独立进行握手的
用电的过程
让你作为开发者更少地消耗电量
从而留给用户更多的电池使用时间
那么让我们来看看如何使用此功能
在这里 我们将看到你可能想表达的各种各样的工作
当手机插入时运行它
每当未计量的网络可用时也使用它
但要确保我在一小时内运行
等待至少10分钟 然后在下一次设备是空闲时
再运行它
每隔15分钟 每当一个网络可用可用时
让我们知道这样我就可以做一些小的健康检查
这四个用例有一些限制
你可以指定你想要的尽可能多或尽可能少的数量
但调度程序将只运行一个
满足所有的标准的作业
一个例外是 当您设定一个最后期限的并且
当这一期限到期时 它会
覆盖现有的约束条件
让我们来看看我们实际上是如何做到这一点的
假设这份工作离最后期限还有一小时
但是如果手机在飞行模式下过后一小时
会发生什么
说到这里 我们来谈谈在未来和最后一节的失败重试
让我们来看看其他一些有趣的事情
我的工作服务就是为你提供的端点
你在这里确认它 这样系统会
知道你的工作应该如何收尾
无线网络连接上传ID在任务计划内被处理
就像你安排的那样与其他任务区别开来
所以 这是你自己收集的一个数
你为了对象接受这份工作的 而且它
以正常的方式通入该系统 瞧
但是 我的逻辑何去何从呢
OK,你可以通过该架构扩展服务的提供商
该框架的服务会处理所有的严重生命周期内的机械工作
让你只需为onStartJob和onStopJob的事
而担心
一旦你的工作在被部署在你的服务上
而且你已经做了一切你需要做的
调用jobFinished然后就大功告成了
差不多就是这样
是的 我的确说过
如果你的工作由于某种原因失败的话 要求重新安排也是很简单的
在onStartJob或jobFinished中 你提供了一个布尔值以表明
你是否需要重新安排计划 然后
duang的一下
搞定了
好了 这是很多的细节
但是 如果你仍然和我一样 你拥有了它
并且已经准备好使用它了
真正地用好它应该是
毫不麻烦的
好了 感谢观看