2

如果我想在后台服务中创建一个单独的线程(扩展服务),当应用程序退出(单击主页按钮)或手机进入睡眠状态时,线程是否仍然能够运行?我想使用服务的行为,但是我的后台服务对主线程来说太重了,导致我的 UI 出现跳帧。

4

1 回答 1

1

当应用程序退出(单击主页按钮)或手机进入睡眠状态时,线程是否仍然能够运行?

线程可以在后台运行,也可以在睡眠模式下运行,但主要关注的是是否允许服务运行。

在 Android O 之前,您可以Service不受任何限制地在后台无限期运行。

但是从 Android O 开始,X 分钟(根据我的观察,大约 1-2 分钟)在您的应用程序进入后台后,所有后台服务的限制都会启动,并且您的服务将停止,就像您调用了一样Service.stopSelf()

如果您的意图是:

  • 要无限期地运行线程,那么你应该避免这样做,因为它会影响设备的电池寿命并且操作系统限制不允许这样做。您可以使用尊重打盹模式的WorkManager定期执行您的任务。

  • 为了确保应用程序启动的一次性作业一直执行到完成,您可以创建 ForegroundService。前台服务Service带有通知。您可以考虑一个音乐播放器应用程序,即使您关闭应用程序并通过通知控制它,它也可以播放音乐。

    您可以按照这个SO描述在 Android O 以及之前的版本中启动 ForegroundService 的方法

于 2018-06-21T01:04:33.160 回答