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

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

红存
2023-03-14
@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个答案

仲孙向明
2023-03-14

根据谷歌关于后台服务限制的文档:

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

一般来说,我发现窗口是一分钟左右的东西,但对其他人来说肯定不同。

 类似资料:
  • 我有在多个队列工作器上运行的作业,其中包含一些使用Guzzle的HTTP请求。但是,当我在后台进程中运行这些作业时,此作业中的try-catch块似乎不会拾取。正在运行的进程是一个,它是一个Laravel队列系统工作器,用于监控队列并拾取作业。 相反,抛出的异常是带有以下消息的之一: promise被拒绝,原因如下:cURL 错误 28:操作在 30001 毫秒后超时,收到 0 个字节(请参阅 h

  • 我正在使用Firebase,并测试在应用程序处于后台时从服务器向应用程序发送通知。通知发送成功,它甚至出现在设备的通知中心上,但是当通知出现或者即使我单击它,我的FCMessagingService中的onMessageReceived方法也从未被调用。 当我在应用程序处于前台时进行测试时,调用了onMessageReceived方法,所有工作都很好。该问题发生在应用程序在后台运行时。 这是有意为

  • 我试图完成的是解析来自Remotemessage的传入数据,并根据自定义标记对其进行不同的处理。例如,如果数据映射包含一个名为“my_custom_tag”的字段,我希望完全覆盖弹出的标准firebase消息并编写一个自定义消息。 问题是,当应用程序在后台运行时,我放入onMessageReceived的任何代码都不会被触发。当应用程序在前台运行时,它工作得很好,但如果应用程序在后台,它将不会检测

  • Fire-and-forget 的调用方法极其简单。正如您从 快速开始 一节中了解到,您只需要传递一个具有相应方法和参数的lambda表达式: BackgroundJob.Enqueue(() => Console.WriteLine("Hello, world!")); Enqueue 方法不会立即调用目标方法,而是运行以下步骤: 序列化目标方法及其所有参数。 根据序列化的信息创建一个新的后台任

  • 下面只是我的一小块代码,我试图理解为什么如果我添加了注释掉的代码行,它会抛出一个EmptyStackException。如果一行中有两个空值(通过调用生成),我需要将顶部的项添加到顶部。你知道为什么会这样吗?或者如何使的最大值同时成为的最大值? 我尝试过将这行代码放入中,为的值赋一个变量,但这些都没有帮助。这几乎就像是注释掉的那一行在清空整个堆栈(??)。 要点:如果在注释掉的代码行中,我将与任何

  • 我这里有个奇怪的错误: 我正在开发一个GAE应用程序来读取一些Twitter数据,在阅读了大量文档后,我让它在我的测试服务器上工作(在我的pc上运行),但在real(我的appspot域)上部署和测试后,它显示以下消息: 401:身份验证凭据(https://dev.twitter.com/pages/auth)失踪或失踪 我尝试重新创建我的OAuthAppToken和OAuthAppTokenS