ric*_*ira 4 android android-service android-activity android-9.0-pie
我自己无法重现此崩溃,但我最近在 Crashlytics 中看到了很多崩溃。崩溃仅发生在 Android 9 及更高版本上:
Fatal Exception: java.lang.RuntimeException
Unable to resume activity {co.whitesmith.flicks/co.whitesmith.flicks.media.audio.AudioPlayerActivity}: java.lang.IllegalStateException: Not allowed to start service Intent { act=com.devbrackets.android.playlistcore.start_service cmp=co.whitesmith.flicks/.media.service.MediaService (has extras) }: app is in background uid UidRecord{63e190 u0a221 TPSL bg:+3h19m42s918ms idle change:idle procs:1 seq(2385,2385,2385)}`
Run Code Online (Sandbox Code Playgroud)
堆栈跟踪:
android.app.ContextImpl.startServiceCommon (ContextImpl.java:1616)
android.app.ContextImpl.startService (ContextImpl.java:1571)
android.content.ContextWrapper.startService (ContextWrapper.java:669)
arrow_right
com.devbrackets.android.playlistcore.manager.BasePlaylistManager.play (BasePlaylistManager.kt:298)
co.whitesmith.flicks.media.audio.AudioPlayerFragment.startPlayback (AudioPlayerFragment.kt:231)
co.whitesmith.flicks.media.audio.AudioPlayerFragment.restartAudio (AudioPlayerFragment.kt:201)
co.whitesmith.flicks.media.audio.AudioPlayerFragment.updateCurrenPlaybackInformation (AudioPlayerFragment.kt:401)
co.whitesmith.flicks.media.audio.AudioPlayerFragment.onResume (AudioPlayerFragment.kt:118)
androidx.fragment.app.Fragment.performResume (Fragment.java:2649)
Run Code Online (Sandbox Code Playgroud)
我不明白这次崩溃。为什么无法在该onResume()方法中启动服务?当活动进入“已恢复”状态时,不应该处于前台吗?
这是一个错误!在 Android 9+ 中,应用程序 UID 转向前台与正在恢复的 Activity 之间存在竞争。
\n\n这是 Google 的解决方法:
\n\n\n\n\n该问题已在未来的 Android 版本中得到解决。
\n\n有一种解决方法可以避免应用程序崩溃。
\nActivity.onResume()应用程序可以通过调用 获取进程状态ActivityManager.getRunningAppProcesses(),并在重要性级别低于\n 时避免启动服务ActivityManager.RunningAppProcessInfo.IMPORTANCE_FOREGROUND。如果设备尚未完全唤醒,则活动将立即暂停,并最终在完全唤醒后再次恢复。
但是,有一个更简单的解决方法,可以延迟服务的启动,直到应用程序完全转到前台:
\n\nnew Handler().postDelayed(() -> startService(...), 100);\nRun Code Online (Sandbox Code Playgroud)\n
| 归档时间: |
|
| 查看次数: |
1720 次 |
| 最近记录: |