首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >活动中的onPause()和onStop()

活动中的onPause()和onStop()
EN

Stack Overflow用户
提问于 2012-07-09 06:33:22
回答 3查看 100.7K关注 0票数 22

我是一个新的Android开发新手,我仍然不能理解活动中的onPause()onStop()方法。

在我的应用程序中,我有一个静态类,我将其命名为Counter,它将变量的状态保存在应用程序的内存中。我的应用程序在模拟器中运行良好。我试图测试的是onPause()onStop()的不同行为。

对于onPause,我希望保留存储在Counter类的成员中的值,而调用onStop()时,我希望将计数器值重置为零。因此,我覆盖了onStop(),并将counter类中的变量设置为零。但是,在模拟器中,我似乎无法使应用程序处于暂停状态。在模拟器中,我打开我的应用程序,练习它。然后我点击了模拟器的主页按钮(而不是后退按钮),启动了另一个应用程序,相信这会模仿onPause()的活动。但是,仿真器似乎不支持这一点(我使用的是armeabi v7a仿真器),它似乎总是调用onStop(),因为我的计数器值在onStop()中被重写为零。这是仿真器固有的,还是我做错了什么使我的活动进入暂停状态?

EN

回答 3

Stack Overflow用户

发布于 2012-07-09 06:59:38

onPause():

如果活动失去焦点但仍然可见(即,新的非全尺寸或透明活动在活动顶部具有焦点),它将暂停。暂停的活动完全处于活动状态(它保留所有状态和成员信息并保持与窗口管理器的连接),但在内存极低的情况下可能会被系统终止。

onStop():

如果一个活动被另一个活动完全遮挡,它将被停止。它仍然保留所有状态和成员信息,但是,它对用户不再可见,因此它的窗口被隐藏,并且当其他地方需要内存时,它通常会被系统终止。

取自android参考活动类:http://developer.android.com/reference/android/app/Activity.html

票数 2
EN

Stack Overflow用户

发布于 2012-07-09 07:06:59

如果你正在模仿Android4.x,你可以使用设置和开发者选项->不保留活动和后台进程限制来控制系统处理后台活动的方式。对于较老的版本,有一个名为Dev Tools的应用程序,其中包含相同的设置。但是,在内存不足的情况下,系统可能会忽略这些设置并终止应用程序。增加分配给模拟器的内存量可能会有所帮助。

此外,如果您从Eclipse重新启动您的应用程序,它将终止之前的进程,而不是优雅地终止它。

票数 1
EN

Stack Overflow用户

发布于 2013-06-10 01:00:40

我同意milter的观点!

onPause():

如果活动失去焦点但仍然可见(即,新的非全尺寸或透明活动在活动顶部具有焦点),它将暂停。暂停的活动完全处于活动状态(它保留所有状态和成员信息并保持与窗口管理器的连接),但在内存极低的情况下可能会被系统终止。

如果您在不按Back键(按住HOME键)的情况下交换应用程序,则操作系统将调用onPause。当您返回到onResume中的活动(再次按住Home键)时,您应该保留所有的私有变量。但是你不能控制用户,对吧?!

如果您预计用户将离开您的应用程序,并且操作系统调用您的onStop,那么如果您打算从中断的位置继续,那么最好保存您的数据。

我也有一个计时器,我需要保存过去的时间,以便当用户返回时,我可以恢复数据。下面是我要保存的示例:

代码语言:javascript
复制
@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. 
} 

以及我要恢复的代码:

代码语言:javascript
复制
@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”等。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11387258

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档