活动生命周期方法与挽救状态

时间:2013-02-27 16:58:54

标签: android android-lifecycle

我开始阅读有关活动生命周期回调和保存状态的内容,并且有很多我不理解的东西 - 我正在编写一个Android应用程序,但我想问一些更普遍的问题,而不是具体如何去做对于我目前为数不多的活动,我想更全面地了解这是如何运作的!

我看到有两组方法被使用(我见过一两个但不想再混淆我自己......)

  • onPause,onResume等,
  • 然后是onSaveInstanceState。

它们与我们应该使用它们的情况有什么区别?我已经看到一些问题,其中一张海报使用了一个正常的生命周期回调,并被告知使用onSaveInstanceState,所以什么时候我们应该实现onPause而不是onSaveInstanceState等等。一些帖子提到了仅用于暂态的方法,有人可以扩展吗?

我看到状态被用来表示略有不同的东西 - UI / View状态和Activity状态,两者之间有什么区别?
我对国家的意思也有些不确定,当我们保存国家时我们正在拯救什么样的东西,有人能给出一些简单的例子(我不是指实际的代码)? android开发人员指南说android系统自动处理其中的一些,那么我们应该关注什么呢? onCreate和onSaveInstanceState使用的Bundle对象只存储简单值,那么更复杂的对象和数组呢。

由于

3 个答案:

答案 0 :(得分:0)

protected void onPause ()
protected void onSaveInstanceState (Bundle outState)

只需查看它,onSaveInstanceState就有了一个Bundle,你可以把你需要的东西保存在其中。并将其返回onCreate(Bundle)或onRestoreInstanceState(Bundle); 文件中的一些重要内容:

  

在激活某个活动之前调用此方法,以便在此时执行   在未来的某个时候,它可以恢复它的状态。不要   将此方法与活动生命周期回调混淆,例如   onPause(),在放置活动时始终调用   背景或正在破坏的路上,或onStop()   在破坏之前召唤。

答案 1 :(得分:0)

尝试使用此代码来保存状态

@Override
protected void onSaveInstanceState(Bundle outState) {
  State s = new State(yourTextView.getText().toString());
  outState.putSerializable(State.STATE, s);
  super.onSaveInstanceState(outState);
}

@Override
protected void onRestoreInstanceState(Bundle savedInstanceState) {
  super.onRestoreInstanceState(savedInstanceState);
  State s = (State) savedInstanceState.getSerializable(State.STATE);
  yourTextView.setText(s.getYourTextViewText());
}

答案 2 :(得分:0)

Android可以在任何给定时间破坏您的活动甚至杀死您的进程(不太可能在用户可见时:-))。当用户导航回活动时,应该再次显示屏幕上显示的数据/信息。

onSaveInstanceState回调允许您执行此操作。

大多数视图已经自动为您完成此操作。例如。 EditText中的当前文本,ListView的当前滚动位置等都会自动为您保存。

但是,有些内容不会自动为您保存。例如。 TextView中的当前文本,特定视图的(更改的)背景可绘制。

说,您在用户操作失败后显示错误消息。然后错误消息显示在TextField中,此TextField的背景变为红色(我只是在这里:-))。当用户在显示此错误时离开活动(例如,按下主页按钮),活动将被销毁,当用户返回活动时,错误消息和红色背景将不会再次显示。

这是onSaveInstanceState拯救的地方 您可以在其中保存包含错误消息的String。然后,当重新创建活动时,Bundle savedInstanceState的{​​{1}}不为空,您可以查询错误消息。如果此消息不为空/空,请在onCreate上调用setText以获取错误消息,并将TextView的背景设为红色。