代码之家  ›  专栏  ›  技术社区  ›  Dportology

Android:保持服务运行,关闭应用程序时停止(从应用程序托盘中移除)

  •  0
  • Dportology  · 技术社区  · 6 年前

    我的解决方案是使用 START_NOT_STICKY 这似乎是可行的,但我关心的是服务文档对这个命令的描述

    START_NOT_STICKY表示,从onStartCreated()返回后,如果进程被终止而没有剩余的START命令要传递,那么服务将停止而不是重新启动。对于那些只在执行发送给它们的命令时运行的服务来说,这就更有意义了。例如,服务可以从警报开始每隔15分钟启动一次,以轮询某些网络状态。如果它在工作时被杀死,最好让它停下来,下次警报响起时再启动。

    开始不粘 服务将不会重新启动。

    我试着用 START_STICKY 但即使在应用程序关闭后,该服务也能继续运行。

    当应用程序处于前台或后台时,我可以做些什么来保持服务的运行,并在关闭后停止,但不必担心Android在应用程序运行时终止它?

    如果有必要,请在此处编码:

    @Override
    public int onStartCommand(Intent intent, int flags, int startId){
    
        if (intent != null) {
            extras = intent.getExtras();
    
            // takes the messenger object and makes it local so when the messagereceiver sends an intent here, it won't overwrite the extras object
            // and get rid of the messenger. Otherwise, getting an update from the notification controls would null out the messenger object
            if (intent.hasExtra("MESSENGER")) {
                Timber.e("MESSENGER ");
                messenger = (Messenger) extras.get("MESSENGER");
            }
        }
        return START_NOT_STICKY;
    }
    
    1 回复  |  直到 6 年前
        1
  •  1
  •   dominicoder    6 年前

    当应用程序处于前台或后台时,我可以做些什么来保持服务的运行,并在关闭后停止,但不必担心Android在应用程序运行时终止它?

    我不知道你指的是什么“应用托盘”,或者你所说的“关闭”到底是什么意思(Android应用本身并不是“关闭”的东西)。

    • 当活动在前台时,当用户启动应用程序并绑定到时启动服务
    • 不要试图检测应用程序何时“关闭”,而不是真正做到这一点,而是在前台通知上附加一个“取消”操作,这样用户可以随时取消它

    如果这不能解决您的问题,请详细说明您的用例以及为什么要这样做。我或其他人可能会提供更多/更好/替代性建议,更具体地说明你最终要实现的目标。

    希望有帮助!