当前位置: 首页 > 知识库问答 >
问题:

Android9.0:不允许启动服务:应用在后台..onResume()之后

华和悦
2023-03-14
@Override
protected void onResume() {
    super.onResume();

    startService(new Intent(this, MusicService.class));
}
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上。

共有1个答案

孔嘉茂
2023-03-14

谷歌有一个变通办法:

这个问题已经在未来的Android版本中解决了。

有一种解决方法可以避免应用程序崩溃。应用程序可以通过调用ActivityManager.GetRunningAppProcesses()获得Activity.OnResume()中的进程状态,如果重要性级别低于ActivityManager.RunningAppProcessInfo.Importance_Foreground则避免启动服务。如果设备尚未完全唤醒,活动将立即暂停,并最终在完全唤醒后再次恢复。

// hack for https://issuetracker.google.com/issues/113122354
    List<ActivityManager.RunningAppProcessInfo> runningAppProcesses = activityManager.getRunningAppProcesses();
    if (runningAppProcesses != null) {
        int importance = runningAppProcesses.get(0).importance;
        // higher importance has lower number (?)
        if (importance <= ActivityManager.RunningAppProcessInfo.IMPORTANCE_FOREGROUND)
            URLPlayerService.startActionBroadcastServiceData(PlayerActivity.this);
    }
// hack for https://issuetracker.google.com/issues/113122354
   handler.postDelayed(() -> URLPlayerService.startService(PlayerActivity.this),200);
 类似资料:
  • 据报道,像素设备的Android 11出现了以下崩溃。 致命异常:java.lang.RuntimeException无法启动活动ComponentInfo{}:java.lang.IllegalStateException:不允许启动服务意图{}:应用程序在后台uid UidRecord{} 这只发生在Android 11设备上。谷歌Android 11的服务实现有重大变化吗?

  • 我只兼职做Android开发(考虑到API的许多细微之处和低级水平,这似乎很有挑战性),并且在我的应用程序处于后台时接收通知有问题。我的目标是Android8.1。我的应用程序碰巧使用了Azure和Xamarin,但我不知道这些细节是否是问题所固有的。 如果我的应用程序在后台,有时会显示通知,但其他时候我的应用程序会因以下错误而崩溃: 我看到这样的文章:https://blog.xamarin.c

  • 问题内容: 我目前正在使用在Oreo中崩溃的startWakefulService函数。我意识到我要么必须切换到startForegroundService()并使用前台服务,要么切换到JobIntentService,但是基于下面的代码,我不确定该怎么做。(对不起,我是android新手)。正确方向的任何观点将不胜感激。 这是在Android 8.x上运行时遇到的当前错误 致命异常:java.l

  • 这是在Android8.x上运行时出现的当前错误 致命异常:java.lang.RuntimeException无法启动接收方com.heyjude.heyjudeapp.gcm.gcmbroadcastreceiver:java.lang.illegalstateException:不允许启动服务意图{act=com.google.android.c2dm.Intent.receive flg=

  • 问题内容: 我有一个flask应用程序,目前正在以以下方式启动: 当我运行此脚本时,它通过打印成功执行: 但是它永远不会返回,如果我执行CTRL-C,服务器将停止。我正在尝试将其部署到生产环境中,并希望在后台运行此启动,只要服务器启动,进程就可以启动。 做这个的最好方式是什么? 问题答案: 可能是使其在后台运行的最简单方法。就是说,如果你要将其转入生产环境(如@LukasGraf所提到的那样,则不

  • 我将我的应用程序和升级到SDK 31,并开始在后台更新小部件的服务中接收以下应用程序崩溃。 此外,如果您使用的是Firebase Crashlytics之类的东西,那么stacktrace必须是这样的- 我正在添加重现此问题的方法,并修复了此问题,因为当我搜索StackOverflow时,我没有在StackOverflow上找到任何关于此问题的留档。