Android activity 和前台服务 - 一般问题
Android activity and foreground service - general question
这是关于服务和活动的 Android 生命周期的一般性问题。我不是要解决特定问题,只是更好地了解机制以帮助设计。
我相信 Android 可以随时杀死 activity,例如如果内存不足且不是前景 activity。也不一定调用 onDestroy() (出于某种原因)。它可以对服务做同样的事情,但不太可能 - 试图让服务继续下去。
假设我有一个启动前台服务的 activity。服务需要通知 activity 一些异步事件,为此 activity 实现了一个特定的接口,将自己的引用传递给服务,在该服务上可以调用一些接口方法服务 - 即监听器。
activity 进入后台,Android 决定杀死它。但是服务有对它的引用。那么 activity 会发生什么?大概它不能被垃圾收集,因为服务中有对它的实时引用?这是否意味着该服务使 activity 保持活动状态?可以在 onDestroy() 中清除侦听器,但如果不调用则不会。
不是这样的。一般来说,Android 不会杀死单个组件(如 Activity
或 Service
)。它只是终止托管整个应用程序的 OS 进程。在这种情况下,所有活动和服务都将被终止,虚拟机也是如此。除非您另有说明,否则应用程序的所有活动和服务都托管在同一 OS 进程中的同一 VM 内。
这是关于服务和活动的 Android 生命周期的一般性问题。我不是要解决特定问题,只是更好地了解机制以帮助设计。
我相信 Android 可以随时杀死 activity,例如如果内存不足且不是前景 activity。也不一定调用 onDestroy() (出于某种原因)。它可以对服务做同样的事情,但不太可能 - 试图让服务继续下去。
假设我有一个启动前台服务的 activity。服务需要通知 activity 一些异步事件,为此 activity 实现了一个特定的接口,将自己的引用传递给服务,在该服务上可以调用一些接口方法服务 - 即监听器。
activity 进入后台,Android 决定杀死它。但是服务有对它的引用。那么 activity 会发生什么?大概它不能被垃圾收集,因为服务中有对它的实时引用?这是否意味着该服务使 activity 保持活动状态?可以在 onDestroy() 中清除侦听器,但如果不调用则不会。
不是这样的。一般来说,Android 不会杀死单个组件(如 Activity
或 Service
)。它只是终止托管整个应用程序的 OS 进程。在这种情况下,所有活动和服务都将被终止,虚拟机也是如此。除非您另有说明,否则应用程序的所有活动和服务都托管在同一 OS 进程中的同一 VM 内。