繁体   English   中英

Android 从前台应用程序启动后台服务

[英]Android start background service from foreground app

我似乎无法从前台应用程序启动后台服务的无崩溃实现。 当我的应用程序启动时,我使用 SignalR 实现启动后台服务,以实现一些 websocket 魔法。 我知道 Android O 限制,但我总是在应用程序进入前台时启动它。 这是我的干净解决方案:

class ActivityDelegate(private val activity: FragmentActivity) : LifecycleObserver {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        activity.lifecycle.addObserver(this)
    }

    @OnLifecycleEvent(Lifecycle.Event.ON_START)
    fun startSignalR() {
        activity.startService(Intent(context, CoreSignalRService::class.java))
    }
}

现在还有一些调整,同样不起作用:

  • OnLifecycleEvent(ON_RESUME) 而不是 ON_START
  • 挂钩 ProcessLifecycleOwner.get() 生命周期而不是活动的生命周期
  • 即使在lifecycle.currentState .currentState 之前检查也无济于事

尽管如此,每次我发布应用程序时,我都会时不时地收到错误
Caused by: java.lang.IllegalStateException: Not allowed to start service Intent { cmp=tld.example.something.CoreSignalRService }: app is in background uid UidRecord{98536ea}

我究竟做错了什么? 与这种生命周期方式相比,如何更好地获取应用程序的状态?

PS:不,我不想要前台服务。 我什至应该需要它,因为只有当应用程序处于活动状态(在前台)时我才需要我的服务。
PPS:我知道这个问题似乎与那些被问过几次的问题相似,但它们(我希望所有)在使用前台服务时是不同的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM