Android 活动和前台服务 - 一般问题

Posted

技术标签:

【中文标题】Android 活动和前台服务 - 一般问题【英文标题】:Android activity and foreground service - general question 【发布时间】:2021-10-19 23:33:27 【问题描述】:

这是关于服务和活动的 android 生命周期的一般问题。我不是在尝试解决特定问题,只是为了更好地了解有助于设计的机制。

我相信 Android 可以随时终止活动,例如内存不足且不是前台活动时。也不一定调用 onDestroy() (出于某种原因)。它可以对服务做同样的事情,但不太可能 - 试图让服务继续运行。

假设我有一个启动前台服务的活动。服务需要通知 Activity 一些异步事件,并为此 Activity 实现特定接口,将自身的引用传递给服务,服务可以在该引用上调用某些接口方法 - 即侦听器。

活动进入后台,Android 决定终止它。但是该服务对其有参考。那么活动会发生什么?大概它不能被垃圾收集,因为服务中有对它的实时引用?这是否意味着服务使活动保持活力?可以清理 onDestroy() 中的侦听器,但如果不调用它就不行。

【问题讨论】:

【参考方案1】:

它不是这样工作的。一般来说,Android 不会杀死单个组件(如ActivityService)。它只是杀死了托管整个应用程序的操作系统进程。在这种情况下,所有的活动和服务都将被终止,VM 也是如此。除非您另外指定,否则应用程序的所有活动和服务都托管在同一操作系统进程中的同一 VM 内。

【讨论】:

啊,谢谢,那我误会了。我最近做了一个带有活动和前台服务的应用程序——处理 GPS 的服务是我发现在应用程序处于后台时保持 GPS 位置定期进入的唯一方法,这是一项要求。我认为作为副产品,该服务也将更有弹性地被杀死。我认为那是错误的,那么? 与在后台运行的托管Service 的进程相比,Android 杀死托管前台Service 的操作系统进程的可能性更小。但是,这仍然不能保证。 感谢您的帮助。

以上是关于Android 活动和前台服务 - 一般问题的主要内容,如果未能解决你的问题,请参考以下文章

与前台服务android通信

与前台服务android通信

Android中的前台通知启动新的活动(通过pendingIntent)而不是现有的

如何在前台(顶部)活动(应用程序)更改时收到通知

API 级别 24 中的前台服务 - Android 7.0 Nougat

当活动从后台(暂停)到前台时重新创建 Android 活动