我在一个活动中创建一个新线程,我依靠onPause()来中断线程。如果我的应用程序崩溃,或者Activity不知何故不再存在,我希望线程被杀死。
当Activity不再运行时,是否保证调用Activity / Fragment.onPause()?如果没有,我怎么能保证有问题的线程被杀?
答案 0 :(得分:13)
此处未调用如果我的应用崩溃了
onPause()
,但这不应该打扰您,因为整个应用程序进程不再存在,包括您创建的所有线程(UI或其他)。
每当您的Activity从前台移动到后台时,都会调用活动不知何故不再存在
onPause()
,除了您的应用程序崩溃之外,可以通过每种可以想象的方式关闭您的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),或在您的活动暂停且用户不需要时可能影响电池寿命的任何资源。
注意:
可以在后台同时保存多个任务。但是,如果用户同时运行许多后台任务,系统可能会开始销毁后台活动以恢复内存,从而导致活动状态丢失。