【问题标题】:How to prevent android service getting killed (Service with notification)如何防止android服务被杀死(带有通知的服务)
【发布时间】:2014-07-08 06:09:51
【问题描述】:

我正在开发一个需要不断显示通知的应用程序。
我有一项服务可以每秒钟显示一次通知。
当资源不足时,android 正在杀死我的服务。
我已经从 onStartCommand() 返回 START_STICKY。
因此,一段时间后,服务将重新启动。
但与此同时,通知看起来停止了。

我在某处发红称,显示通知的服务可能会被 android 阻止。我想不出任何例子。

【问题讨论】:

  • 查看文档以获得前台服务。

标签: android


【解决方案1】:

使用

startForeground(int,Notification);

在服务的 onCreate 中。它需要一个通知编号和一个通知对象,它将显示在通知栏中。

要删除通知,请使用

startForeground(0,Notification);

【讨论】:

    【解决方案2】:

    如上所述,您需要使用startForeground(int,Notification) 方法来了解用户您的服务。它也因此获得了更多的特权。

    您可以阅读更多关于它的信息here(内部示例)。

    【讨论】:

      【解决方案3】:

      没有办法完全阻止它被杀死。使其成为前台服务会有所帮助。返回 start_sticky 意味着如果它停止,它将重新启动(因此它应该在其 onCreate 中对自身执行 startService 以确保它重新启动而不仅仅是重新创建)。但Android有权随时因资源原因终止任何服务。

      【讨论】:

        【解决方案4】:

        更新:

        您可以在场景中使用Foreground Service。来自文档:

        前台服务是一种被认为是用户主动了解的服务,因此不会在内存不足时被系统杀死。前台服务必须为状态栏提供通知,该通知位于“正在进行”标题下,这意味着除非服务停止或从前台删除,否则无法解除通知。


        据我所知,没有万无一失的方法可以防止您的服务被 android 系统停止。如果设备对内存/资源至关重要,则必须停止服务以进行 GC。也不建议这样做,因为您的服务会耗尽设备电池。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-02-16
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多