Android: 系统空闲时调度长后台任务

Android: Scheduling long background task when system is idle

我正在编写一个 Android 应用程序来录制视频,然后 运行 对录制的视频进行 post 处理。由于 post 处理可能需要一段时间(最多一个小时),我正在安排一项服务 - JobService 使用 JobScheduler 到 运行 当 phone 连接到电源并空闲时,即在晚上 运行。 在新线程上执行长期 运行ning 作业的作业服务。

实际上,我预定的服务运行得非常慢。看起来虽然系统空闲时 运行s,但它获得的带宽很少 CPU。 OS.

最多 10 分钟后我的服务也停止了

我知道Android Oreo 限制后台处理。 Google 详细记录了这一点。但是我想知道是否有办法在系统空闲时 运行 后台服务。

有没有办法在系统闲置时运行长时间后台服务?例如视频 post 处理?

您需要使用 Foreground service

它们是留给 运行 长后台任务的少数方法之一。用户必须知道他的设备上发生了什么,他应该有能力决定是否停止它。

您可以阅读如何实现基本的前台服务here,互联网上有很多关于如何以高级方式实现它们的指南。

Remember that even a Foreground Service can be stopped by the OS if the system is in extreme memory pressure and the only things left to destroy are foreground services. So you should always have a recovery procedure if that happens.