Android 是否保证在活动不再运行时调用onPause?

Android 是否保证在活动不再运行时调用onPause?,android,Android,我在一个活动中创建了一个新线程,并依靠onPause()中断该线程。如果我的应用程序崩溃,或者活动以某种方式停止存在,我希望线程被终止 是否保证在活动不再运行时调用Activity/Fragment.onPause()?如果没有,如何保证相关线程被终止?是,当活动不再运行时,将调用onPause()。假设某个活动已关闭,则事件序列将为onPause()->onStop()->onDestroy()。即使当另一个活动启动或屏幕关闭时,您的活动滑入后台,也始终会调用onPause(),即使未调用其他

我在一个活动中创建了一个新线程,并依靠onPause()中断该线程。如果我的应用程序崩溃,或者活动以某种方式停止存在,我希望线程被终止

是否保证在活动不再运行时调用Activity/Fragment.onPause()?如果没有,如何保证相关线程被终止?

是,当活动不再运行时,将调用
onPause()
。假设某个活动已关闭,则事件序列将为
onPause()
->
onStop()
->
onDestroy()
。即使当另一个活动启动或屏幕关闭时,您的活动滑入后台,也始终会调用
onPause()
,即使未调用其他两个方法。因此,即使活动停止,
onPause()
也将被调用,线程将被终止

但是,当你的应用程序崩溃时,连同你的整个活动,即使是你已经开始的线程也会被安卓处理完毕

如果我的应用程序崩溃

此处不调用
onPause()
,但这不会影响您,因为您的整个应用程序进程已经不复存在,包括您创建的所有线程(UI或其他)

活动不知何故不再存在

每当您的活动从前台移动到后台时,都会调用
onPause()
,除了应用程序崩溃之外,这是以各种可以关闭活动的方式完成的。然而,正如我上面提到的,应用程序崩溃在默认情况下也会杀死你的线程


onPause()
基本上是在您的活动不再位于前台时调用的。调用
onPause()
后,您的活动可能仍处于活动状态并在内存中,但我无法想象您的活动在没有
onPause()的情况下仍处于活动状态且处于后台的场景
正在调用。

假设您有两个活动A和B。您从A导航到B。活动A转到后台,即活动A暂停。活动B的重点是前景。当您单击后退按钮时,活动B从后堆栈弹出,活动A聚焦,即活动A继续

当您在“活动”中显示对话框时,单击“上一步”按钮将显示“暂停中的活动”对话框,对话框将被取消,活动将继续(前台)

当“活动”不再运行时,它处于后台,因此暂停。我同意Raghav Sood关于应用程序崩溃时会发生什么的看法

通常应使用onPause()回调来:

停止可能消耗CPU的动画或其他正在进行的操作。 提交未保存的更改,但前提是用户希望在离开时永久保存这些更改(例如草稿电子邮件)。 释放系统资源,如广播接收器、传感器手柄(如GPS)或在活动暂停且用户不需要时可能影响电池寿命的任何资源

注:

可以在后台同时执行多个任务。但是,如果用户同时运行多个后台任务,系统可能会开始销毁后台活动以恢复内存,从而导致活动状态丢失