当android破坏活动以节省内存但不杀死应用程序时,是否总是调用onDestroy?

当android破坏活动以节省内存但不杀死应用程序时,是否总是调用onDestroy?,android,android-activity,android-lifecycle,Android,Android Activity,Android Lifecycle,我想使用Application.ActivityLifecycleCallbacks来监视后堆栈中有多少活动。是否可以在onCreate/onDestroy中使用递增/递减计数器来处理此问题?onDestroy()是在活动实例被销毁并从内存中完全删除之前对其调用的最后一个方法。在极端情况下,Android可能会终止承载活动的应用程序进程,这将导致OnDestroy无法被调用。显然,大多数活动都不会实现此方法,因为大多数清理和关闭都是在OnPause和OnStop方法中完成的。 有关更多详细信息,

我想使用
Application.ActivityLifecycleCallbacks
来监视后堆栈中有多少活动。是否可以在onCreate/onDestroy中使用递增/递减计数器来处理此问题?

onDestroy()是在活动实例被销毁并从内存中完全删除之前对其调用的最后一个方法。在极端情况下,Android可能会终止承载活动的应用程序进程,这将导致OnDestroy无法被调用。显然,大多数活动都不会实现此方法,因为大多数清理和关闭都是在OnPause和OnStop方法中完成的。 有关更多详细信息,请访问Android开发者门户。 (“Android开发者”)

onDestroy()是在活动实例被销毁并从内存中完全删除之前对其调用的最后一个方法。在极端情况下,Android可能会终止承载活动的应用程序进程,这将导致OnDestroy无法被调用。显然,大多数活动都不会实现此方法,因为大多数清理和关闭都是在OnPause和OnStop方法中完成的。 有关更多详细信息,请访问Android开发者门户。
(“Android开发者”)

onDestroy不能保证每次活动被破坏时都会被调用

如果用户单击“上一步”销毁它,将调用onDestroy。
如果用户从最近的应用程序菜单中滑动应用程序,则不会调用onDestroy。

如果应用程序崩溃,则无法确定它是否会被调用(根据我的经验,它没有被调用)。

onDestroy不是保证在每次活动被破坏时都会被调用

如果用户单击“上一步”销毁它,将调用onDestroy。
如果用户从最近的应用程序菜单中滑动应用程序,则不会调用onDestroy。
如果应用程序崩溃,则无法确定是否调用它(根据我的经验,它没有被调用)

当android破坏活动以节省内存时,是否总是调用onDestroy

文档:

在您的活动被销毁之前,您收到的最后一个呼叫。这可能是因为活动正在完成(有人在其上称为
finish()
),或者是因为系统正在临时销毁此活动实例以节省空间。您可以使用
isFinishing()
方法区分这两种情况

我想使用Application.ActivityLifecycleCallbacks来监视 在后台堆栈中有许多活动。我可以递增/递减吗 是否在onCreate/onDestroy中使用计数器来处理此问题

最好在
onStart()
onStop()
方法中使用计数器,onCreate()不能保证可见性。例如,如果某件事情以某种方式阻止了
onStart()
的发生

当android破坏活动以节省内存时,是否总是调用onDestroy

文档:

销毁活动前您收到的最后一个调用。发生这种情况的原因可能是活动正在完成(有人在活动上称为
finish()
),也可能是因为系统正在临时销毁活动的此实例以节省空间。您可以使用
isFinishing()区分这两种情况
方法

我想使用Application.ActivityLifecycleCallbacks来监视 在后台堆栈中有许多活动。我可以递增/递减吗 是否在onCreate/onDestroy中使用计数器来处理此问题


最好在
onStart()
onStop()
方法中使用计数器,onCreate()不能保证可见性。例如,如果某个东西以某种方式停止了
onStart()
避免发生。

最好在停止-开始暂停中进行计数器。此计数器不会显示后台堆栈中的许多活动。它将显示前台是否有应用程序。没有更好的理由,在开始-停止中实现时会更清楚。您可以使用
暂停()
,但就像我说的
start
stop
工作正常。如果
start()
后面跟着一个
stop()
而不是
resume()
,计数仍然是正确的。记住
pause()
resume()之后
。但当应用程序位于后台时,计数器将始终为0。但这不是我需要的。我想定义是否有任何活动在后台或前台运行(无所谓)并获取当前的活动类。最好在停止-开始-暂停中进行计数器。此计数器将不显示主堆栈中的许多活动。它将显示是否在前台的应用程序。没有更好的理由,在开始-停止中实现时会更清楚。您可以使用
pause()
,但就像我说的
start
stop
工作正常。如果
start()
后面跟着一个
stop()
而不是
resume()
,计数仍然是正确的。记住
pause()
resume()之后
。但当应用程序位于后台时,计数器将始终为0。但这不是我需要的。我想定义是否有任何活动在后台或前台运行(无所谓)得到当前的活动类。这应该是一个注释,因为它不回答实际问题,但我同意他应该考虑这一点。只是添加,几乎不可能知道除了谷歌开发者控制台之外的应用程序是否被强制杀死。这应该是一个注释,因为它不回答实际问题,但我同意他。应该考虑这一点。只是补充说,除了谷歌开发者控制台之外,几乎不可能知道这个应用程序是否被强制杀死。