【问题标题】:Are bound services always foreground?绑定的服务总是前台吗?
【发布时间】:2018-02-11 07:48:42
【问题描述】:

我需要为我的应用程序启动一个foreground service,以便它继续运行并且即使应用程序在后台也不太可能被杀死。这是一种方法,startForeground

我还需要与服务进行通信,所以我认为最简单的选择是绑定到它(我计划让它在同一个进程中运行,以便能够将返回的 IBinder 投射到我的班级,然后调用方法)。但是,我在任何地方都找不到有关绑定foreground services 的信息。

阅读文档和教程后,我发现bindService 的标志之一是https://developer.android.com/reference/android/content/Context.html#BIND_NOT_FOREGROUND,以防止服务获得前台优先级。

这是否意味着默认情况下每个bound service 也是一个foreground,并且它需要通知等(文档实际上从未提及它,所以我猜不是)?

如果我的应用使用前台服务,是否可以在后台杀死该应用?

【问题讨论】:

    标签: android foreground-service


    【解决方案1】:

    好吧,让我们谈谈服务。服务可以启动绑定两者都。所以你实际上可以制作 startService() 并在它之后制作 startForeground(),但是当你要 bindService() 时,你可以删除通知并使服务不是前台(在这种情况下看起来像标志 BIND_NOT_FOREGROUND)。绑定服务本身不是前台(它们具有绑定到服务的组件的优先级)。据我所知,要制作前台绑定服务,您不能只调用 startForeground() (它不起作用,不会在状态栏中添加通知),所以唯一的方法是制作 startService() 并在 onStartCommand() 中处理只会执行 startForeground() 的操作。

    所以默认绑定服务不是前台,你不需要通知。您的应用程序可以随时被系统或用户在应用程序的设置中终止(强制停止),但是如果您想让系统知道您的服务对用户和应用程序非常重要,请将其设置为前台,这样系统就不会接触直到系统有足够的内存供您的进程使用。

    【讨论】:

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