4

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

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

通过阅读文档和教程,我发现其中一个标志bindServicehttps://developer.android.com/reference/android/content/Context.html#BIND_NOT_FOREGROUND以防止服务获得前台优先级的信息。

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

如果我的应用程序使用前台服务,该应用程序可以在后台被杀死吗?

4

1 回答 1

3

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

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

于 2018-01-07T08:56:50.637 回答