android - Context.startForegroundService() ANR,但没有实际调用它

标签 android android-service android-8.0-oreo android-anr-dialog foreground-service

将我的应用程序更新为目标 API 27(之前为 25)后,我遇到了许多来自用户的 ANR,但我无法重现。它们似乎与 Oreo 后台执行限制有关,并带有 ANR 消息

Context.startForegroundService() did not then call Service.startForeground(): ServiceRecord{73bc351 u0 com.xxx.xxxx/.player.PlayFileService}

但是,我不会在代码中的任何地方调用 Context.startForegroundService() 。有哪些原因可能会生成此 ANR,但这些原因不是直接调用此方法的结果?

最佳答案

就我而言,即使我没有打电话 Context.startForegroundService()直接调用它是因为我的音乐应用程序将进入后台并且该服务将被系统破坏。然后,当用户在几分钟后按下媒体按钮恢复播放时,系统将重新启动该服务,并且由于该应用程序位于后台,因此会进行该调用。我确实打过startForeground()最终但这是经过一系列配置之后的。我添加了对 startForeground() 的调用onCreate()开头我的服务出现空白通知,并且我的所有 ANR 都消失了。

关于android - Context.startForegroundService() ANR,但没有实际调用它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50595247/

相关文章:

android - BroadcastReceiver 未显示 onReceive 的任何日志

Android前台服务始终抛出 "java.lang.IllegalArgumentException: Service not registered"异常

android - Android 的 JobIntentService 文档中提到的 "JobService execution time limit"有多长?

java - 以编程方式启用通知 channel

android - 为什么在SDK 30及更高版本中,运行holder.lockCanvas和holder.unlockCanvasAndPost的后台线程仍然会锁定UI线程?

android - AsyncTask中applicationobject的调用方法

java - 使用 TCP 套接字从 Android 设备向 ESP8266 Wi-Fi 芯片发送数据

android - 在 BroadcastReceiver 中,对于 SMS 发送和传递操作,getResultCode() 始终返回 -1

Android Long Running 服务和数据库

android - 在 Android 上检测按钮长按