我开始阅读有关活动生命周期回调和保存状态的内容,并且有很多我不理解的东西 - 我正在编写一个Android应用程序,但我想问一些更普遍的问题,而不是具体如何去做对于我目前为数不多的活动,我想更全面地了解这是如何运作的!
我看到有两组方法被使用(我见过一两个但不想再混淆我自己......)
它们与我们应该使用它们的情况有什么区别?我已经看到一些问题,其中一张海报使用了一个正常的生命周期回调,并被告知使用onSaveInstanceState,所以什么时候我们应该实现onPause而不是onSaveInstanceState等等。一些帖子提到了仅用于暂态的方法,有人可以扩展吗?
我看到状态被用来表示略有不同的东西 - UI / View状态和Activity状态,两者之间有什么区别?
我对国家的意思也有些不确定,当我们保存国家时我们正在拯救什么样的东西,有人能给出一些简单的例子(我不是指实际的代码)? android开发人员指南说android系统自动处理其中的一些,那么我们应该关注什么呢? onCreate和onSaveInstanceState使用的Bundle对象只存储简单值,那么更复杂的对象和数组呢。
由于
答案 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
的背景设为红色。