java - 服务中的线程 - Android 应用程序

标签 java android multithreading service background

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

最佳答案

Will the thread still be able to run when the app is exited(click the home button) or the phone goes to sleep?

Thread可以在后台运行,也可以在 sleep 模式下运行,但主要关注是否允许服务运行。

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

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

如果您的 Intent 是:

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

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

    可以关注这个SO描述了Android O及之前版本启动ForegroundService的方法

关于java - 服务中的线程 - Android 应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50956228/

相关文章:

Android - 具有 CHIPS 风格的自定义选项卡布局?

C# Socket.receive 连续接收0字节,循环不阻塞

python - ###运行时错误: Java gateway process exited before sending its port number

android - 在android中共享图像时图像存储在内部存储器中

java - AsyncTask 和回调 Android

java - 如何修复Gradle Build中的 “Failed to process kafka-clients-1.1.1.jar”错误

c++ - Qt 模拟循环

ios - 使用 "performSelectorOnMainThread"在 iOS 上进行上下文切换

java - 使用自定义 validator 在 map 上进行 JSR-303 验证

java - fuseki 错误 - 文件初始化异常