当Activity不再运行时,是否可以保证调用onPause?

时间:2013-05-09 09:40:39

标签: android

我在一个活动中创建一个新线程,我依靠onPause()来中断线程。如果我的应用程序崩溃,或者Activity不知何故不再存在,我希望线程被杀死。

当Activity不再运行时,是否保证调用Activity / Fragment.onPause()?如果没有,我怎么能保证有问题的线程被杀?

3 个答案:

答案 0 :(得分:13)

  

如果我的应用崩溃了

此处未调用

onPause(),但这不应该打扰您,因为整个应用程序进程不再存在,包括您创建的所有线程(UI或其他)。

  

活动不知何故不再存在

每当您的Activity从前台移动到后台时,都会调用

onPause(),除了您的应用程序崩溃之外,可以通过每种可以想象的方式关闭您的Activity。但是,正如我上面提到的,应用程序崩溃也会默认杀死你的线程。

每当您的Activity不再位于前台时,基本上会调用

onPause()。在调用onPause()之后,您的活动可能仍处于活动状态并且在内存中,但是在没有调用onPause()的情况下,我无法想到您的活动处于活动状态以及后台的情况。

答案 1 :(得分:5)

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

但是,当您的应用程序崩溃时,以及您的整个活动,即使是您已启动的主题,也会由Android完成所有操作。

答案 2 :(得分:2)

假设您有两个活动A和B.您从A导航到B.活动A转到后台,即活动A暂停。活动B关注焦点即前景。当您单击后退按钮时,活动B将从后堆栈中弹出,活动A将获得焦点,即活动A将恢复。

当您在活动中显示对话框时,单击后退按钮时会显示暂停和对话框中的活动对话框,并且活动将恢复(前景)。

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

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

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

注意:

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