我是一个新的Android开发新手,我仍然不能理解活动中的onPause()
和onStop()
方法。
在我的应用程序中,我有一个静态类,我将其命名为Counter,它将变量的状态保存在应用程序的内存中。我的应用程序在模拟器中运行良好。我试图测试的是onPause()
与onStop()
的不同行为。
对于onPause
,我希望保留存储在Counter类的成员中的值,而调用onStop()
时,我希望将计数器值重置为零。因此,我覆盖了onStop()
,并将counter类中的变量设置为零。但是,在模拟器中,我似乎无法使应用程序处于暂停状态。在模拟器中,我打开我的应用程序,练习它。然后我点击了模拟器的主页按钮(而不是后退按钮),启动了另一个应用程序,相信这会模仿onPause()
的活动。但是,仿真器似乎不支持这一点(我使用的是armeabi v7a仿真器),它似乎总是调用onStop()
,因为我的计数器值在onStop()
中被重写为零。这是仿真器固有的,还是我做错了什么使我的活动进入暂停状态?
发布于 2012-07-09 06:59:38
onPause():
如果活动失去焦点但仍然可见(即,新的非全尺寸或透明活动在活动顶部具有焦点),它将暂停。暂停的活动完全处于活动状态(它保留所有状态和成员信息并保持与窗口管理器的连接),但在内存极低的情况下可能会被系统终止。
onStop():
如果一个活动被另一个活动完全遮挡,它将被停止。它仍然保留所有状态和成员信息,但是,它对用户不再可见,因此它的窗口被隐藏,并且当其他地方需要内存时,它通常会被系统终止。
取自android参考活动类:http://developer.android.com/reference/android/app/Activity.html
发布于 2012-07-09 07:06:59
如果你正在模仿Android4.x,你可以使用设置和开发者选项->不保留活动和后台进程限制来控制系统处理后台活动的方式。对于较老的版本,有一个名为Dev Tools的应用程序,其中包含相同的设置。但是,在内存不足的情况下,系统可能会忽略这些设置并终止应用程序。增加分配给模拟器的内存量可能会有所帮助。
此外,如果您从Eclipse重新启动您的应用程序,它将终止之前的进程,而不是优雅地终止它。
发布于 2013-06-10 01:00:40
我同意milter的观点!
onPause():
如果活动失去焦点但仍然可见(即,新的非全尺寸或透明活动在活动顶部具有焦点),它将暂停。暂停的活动完全处于活动状态(它保留所有状态和成员信息并保持与窗口管理器的连接),但在内存极低的情况下可能会被系统终止。
如果您在不按Back键(按住HOME键)的情况下交换应用程序,则操作系统将调用onPause。当您返回到onResume中的活动(再次按住Home键)时,您应该保留所有的私有变量。但是你不能控制用户,对吧?!
如果您预计用户将离开您的应用程序,并且操作系统调用您的onStop,那么如果您打算从中断的位置继续,那么最好保存您的数据。
我也有一个计时器,我需要保存过去的时间,以便当用户返回时,我可以恢复数据。下面是我要保存的示例:
@Override
public void onSaveInstanceState(Bundle savedInstanceState) {
super.onSaveInstanceState(savedInstanceState);
// Save UI state changes to the savedInstanceState.
// This bundle will be passed to onCreate if the process is
// killed and restarted.
savedInstanceState.putLong("elapsedTime", elapsedTime);
// etc.
}
以及我要恢复的代码:
@Override
public void onRestoreInstanceState(Bundle savedInstanceState) {
super.onRestoreInstanceState(savedInstanceState);
// Restore UI state from the savedInstanceState.
// This bundle has also been passed to onCreate.
elapsedTime = savedInstanceState.getLong("elapsedTime");
}
将这些方法放在类中,就可以了。请记住,在我的示例中,字符串"elapsedTime“是系统的关键字,并且它必须是唯一的。对要保存的每段数据使用唯一的字符串。例如"startClock“、"ClockTextColor”等。
https://stackoverflow.com/questions/11387258
复制相似问题