【问题标题】:Android: Scheduling long background task when system is idleAndroid:系统空闲时调度长后台任务
【发布时间】:2019-01-13 13:42:08
【问题描述】:

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

实际上,我的预定服务运行非常缓慢。看起来虽然它在系统空闲时运行,但它获得的 CPU 带宽非常少。操作系统最多在 10 分钟后停止我的服务。

我知道 Android Oreo 会限制后台处理。谷歌对此有很好的记录。但是我想知道是否有办法在系统空闲时运行后台服务。

有没有办法在系统空闲时运行长时间的后台服务?比如视频后期处理?

【问题讨论】:

    标签: android performance android-service


    【解决方案1】:

    您需要使用Foreground service

    它们是为数不多的运行长时间后台任务的方法之一。用户必须知道他的设备上发生了什么,并且他应该能够决定是否停止它。

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

    请记住,如果系统处于极大的内存压力并且唯一需要销毁的东西是前台服务,那么操作系统甚至可以停止前台服务。因此,如果发生这种情况,您应该始终进行恢复程序。

    【讨论】:

    • 如果我使用我的 jobService 并向用户显示前台通知,使其成为前台服务?
    • 它应该可以工作,但我从未尝试过。如果 JobService 是一项普通服务,则可以将其转换为前台服务。否则,您可以将逻辑移至标准服务,但此时应该非常容易。
    • @EyalBorovsky 如果这解决了您的问题,您能接受答案吗?可能对其他搜索相同内容的人有所帮助。
    • 我会这样做的!!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多