Android的保存/恢复活动状态的机制

时间:2015-04-11 14:06:43

标签: android android-activity android-edittext android-savedstate

对于我的第一个Android应用程序,我(希望)按照developer.android.com上的教程来写信。完成的应用程序有一个EditText视图,您可以在其中输入文本和一个SEND按钮,它将打开一个新活动(DisplayMessageActivity),以大字体显示EditText中的文本。

我注意到有关EditText中文本持久性的一些不一致行为。假设我在那里输入了一些文字:

  • 当我点击手机底部的“后退”按钮并从图标重新启动应用时,我将文字丢失。

  • 当我点击手机底部的Home buttom并从图标重新启动应用程序时,我会保留文字。

  • 当我按下SEND按钮并通过手机底部的Back按钮离开DisplayMessageActivity时,我会保留文字。

  • 当我按下SEND按钮并通过操作栏中的箭头按钮离开DisplayMessageActivity时,我会松开文本。

任何人都可以向我解释为什么行为不同以及我必须做些什么才能在所有四种情况下保留文字?

1 个答案:

答案 0 :(得分:0)

这是由于android生命周期的缘故,在以下某些情况下,Activity被破坏,因此编辑文本的值会丢失,并且当您重新启动它时,会调用onCreate方法,但在其他情况下,Activity被移至后堆栈当您返回到Activity时,将调用onResume方法。

您可以在下面看到android生命周期的图片:

enter image description here

您可以在此link中从中了解更多信息。

要在重新启动的情况下保存文本框的值,您可以。通过以下代码使用共享的首选项:

设置首选项中的值:

// MY_PREFS_NAME - a static String variable like: 
//public static final String MY_PREFS_NAME = "MyPrefsFile";
SharedPreferences.Editor editor = getSharedPreferences(MY_PREFS_NAME, MODE_PRIVATE).edit();
 editor.putString("name", "Elena");
 editor.putInt("idName", 12);
 editor.apply();

从偏好设置中检索数据:

SharedPreferences prefs = getSharedPreferences(MY_PREFS_NAME, MODE_PRIVATE); 
String name = prefs.getString("name", "No name defined");//"No name defined" is the default value.
int idName = prefs.getInt("idName", 0); //0 is the default value.

您可以在此link

中了解有关共享首选项的更多信息