【发布时间】:2019-01-31 11:18:07
【问题描述】:
我有一个音乐播放器,它试图在 onResume() 中启动 Service 或 Activity。为了清楚起见,我删除了几行,但代码是有效的:
@Override
protected void onResume() {
super.onResume();
startService(new Intent(this, MusicService.class));
}
根据崩溃日志,这会在一些运行 Android P 的设备上引发异常:
Caused by java.lang.IllegalStateException: Not allowed to start service Intent { cmp=another.music.player/com.simplecity.amp_library.playback.MusicService }: app is in background uid UidRecord{6a4a9c6 u0a143 TPSL bg:+3m25s199ms idle change:cached procs:1 seq(1283,1283,1283)}
at android.app.ContextImpl.startServiceCommon(ContextImpl.java:1577)
at android.app.ContextImpl.startService(ContextImpl.java:1532)
at android.content.ContextWrapper.startService(ContextWrapper.java:664)
at android.content.ContextWrapper.startService(ContextWrapper.java:664)
at com.simplecity.amp_library.utils.MusicServiceConnectionUtils.bindToService(SourceFile:36)
at com.simplecity.amp_library.ui.activities.BaseActivity.bindService(SourceFile:129)
at com.simplecity.amp_library.ui.activities.BaseActivity.onResume(SourceFile:96)
我的应用怎么可能在调用onResume()(和super.onResume())之后立即在后台运行?
这对我来说没有任何意义。这可能是平台错误吗?受此崩溃影响的所有 3500 多名用户均使用 Android P。
【问题讨论】:
-
我没有给你一个好的答案,但我可以确认我们也看到了这个。我们从未在内部复制过它,但同样我们在 onResume() 中启动服务时会看到它。我怀疑这是 Android P 中的一个错误。
-
好的,很高兴不仅仅是我。已报告此问题:issuetracker.google.com/issues/113122354
-
另外,面向 Android 9 或更高版本并使用前台服务的应用必须请求 FOREGROUND_SERVICE 权限。这是一个正常的权限,因此系统会自动将其授予请求的应用程序。来自developer.android.com/about/versions/pie/android-9.0-changes-28
-
@iaindownie 是的,它似乎奏效了,它已经投入生产了一段时间,并且我尚未修复的新实例(当时不知道)开始出现因为它走得更远了。
标签: android android-service android-9.0-pie