首页 文章

Oreo:startService()在后台调用时不会抛出IllegalStateException

提问于
浏览
1

根据Android Oreo中引入的background execution limits,当app在后台时调用startService应该抛出 IllegalArgumentException . 检查这个问题:Android 8.0: java.lang.IllegalStateException: Not allowed to start service Intent .

我创建了一个针对Android Oreo的示例应用程序,它执行以下操作:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    new Handler().postDelayed(new Runnable() {
        @Override
        public void run() {
            startService(new Intent(MainActivity.this, MyService.class));
        }
    }, 5000);
}

然后我启动应用程序,然后按下主页按钮立即将应用程序置于后台状态 . 但是没有抛出异常 . 怎么会这样?在这种情况下,我希望应用程序崩溃 .

1 回答

  • 2

    根据谷歌关于background service limitations的文档:

    当应用程序位于前台时,它可以自由地创建和运行前台和后台服务 . 当应用程序进入后台时,它有一个几分钟的窗口,在该窗口中仍然可以创建和使用服务 .

    一般来说,我发现窗口大概是一分钟左右,但对其他人来说肯定会有所不同 .

    看看您的整体设备日志(从命令行运行 adb logcat 或关闭Android Studio中的过滤器's Logcat window) after you' ve背景应用程序并查找类似的内容:

    09-26 13:25:37.150 4741 4756 W ActivityManager:由于应用程序空闲而停止服务:u0a267 -1m12s700ms com.example / .MyService

    在此之后启动服务的任何请求都应该导致异常 . 我猜你需要将超时提升到接近一两分钟的时间 .

相关问题