首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

构建永不停止运行的Android服务

这些天我一直在努力寻找在Android中运行永不停止服务的方法。这只是追求同一目标的指南。希望能帮助到你!

问题

由于Android 8.0(API级别26)中引入了Android电池优化,后台服务现在有一些重要的限制。基本上,一旦应用程序处于后台运行一段时间,它们就会被杀死,这使得它们对于运行永不停止运行的服务毫无价值。

根据Android的建议,我们应该使用JobScheduler唤醒锁,在作业运行时让手机保持清醒状态它似乎运行得很好,并且会为我们处理唤醒锁。

不幸的是,这是行不通的。最重要的是,JobScheduler打盹模式(你需要将数据发送到你的服务器)的限制列表将根据Android自行决定运行工作,一旦手机进入打盹模式,这些工作的运行频率将不断增加。甚至最糟糕的是,如果你想要访问网络 (你需要将数据发送到你的服务器)你将无法做到。查看打盹模式所施加的限制列表。

如果您不介意无法访问网络并且您不关心不控制周期性,JobScheduler也可以正常工作。在我们的例子中,我们希望我们的服务以非常特定的频率运行,永远不会停止,所以我们需要其他东西。

关于前台服务

如果你一直在寻找解决这个问题的互联网,你很可能最终从Android的文档到达了这个页面。

在那里,我们介绍了Android提供的不同类型的服务。看一下描述:

前台服务执行一些用户可以注意到的操作。例如,音频应用程序将使用前台服务播放音频轨。前台服务必须显示通知。即使用户不与应用程序交互,前台服务也会继续运行。

这似乎正是我们正在寻找的……确实如此!

我的代码

创建一个真正是一个简单的过程,所以我将访问并解释构建永不停止的前台服务所需的所有步骤。

像往常一样,我已经创建了一个包含所有代码的存储库,以防您想要查看它并跳过帖子的其余部分。

添加一些依赖项

我在这个例子中使用Kotlin协同程序Fuel,因此我们将利用协同程序和Fuel库来处理HTTP请求。

为了添加这些依赖项,我们必须将它们添加到我们的文件中:

我们的service

需要显示通知,以便用户知道应用程序仍在运行。如果你考虑一下,这是有道理的。

请注意,我们必须覆盖一些处理服务生命周期关键方面的Service回调方法(callback methods)。

我们使用部分唤醒锁打盹模式的也非常重要,因此我们的服务永远不会受到打盹模式的影响。请记住,这会对我们手机的电池寿命产生影响,因此我们必须评估我们的用例是否可以通过Android提供的任何其他替代方案来处理,以便在后台运行流程。

代码中有一些实用函数调用(,)和一些自定义枚举(),但不要太担心。如果您想了解它们的来源,请查看示例存储库。

是时候处理Android Manifest了

我们需要一些额外的权限,和。请确保您不要忘记包含它们,因为它不会起作用。

一旦我们将它们放到位,我们将需要声明服务。

启动这项服务

根据Android版本,我们必须使用特定方法启动服务。

如果Android版本低于API 26,我们必须使用startServicestartForegroundService。在任何其他情况下,是我们使用startForegroundService。

在这里你可以看到我们的,只有一个屏幕,有两个按钮来启动和停止服务。这就是您开始我们永不停止的服务所需的一切。

请记住,您可以查看此GitHub存储库中的完整代码。

效果:在Android启动时启动服务

好的,我们现在有永不停止的服务,每分钟都按照我们的意愿发起网络请求,然后用户重新启动手机……我们的服务不会重新开始……:(失望)

别担心,我们也可以为此找到解决方案。我们将创建一个名为BroadCastReceiver。

然后,我们将再次修改我们并添加一个新的权限()和我们新的BroadCastReceiver。

请注意,除非服务已在运行,否则不会重新启动该服务。这就是我们编程的方式,并不是说它必须是这样的。

如果您想测试这个,只要启动一个包含谷歌服务的模拟器,并确保在root模式下运行adb。

Enjoy!

大家都在看

欢迎前往安卓巴士博客区投稿,技术成长于分享

期待巴友留言,共同探讨学习

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20190927A0JPKJ00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券