混淆了从Android生命周期中使用哪些方法来保存我的应用程序状态

时间:2012-06-24 23:46:53

标签: android android-lifecycle

我的应用程序有两个布局A和B.

在A中,用户通过按RADIO BUTTONS选择一些数据。然后他按下BUTTON转到B布局并使用这些选定的变量动态构建一些视图(EditTexts,TextVies和Buttons)。

在布局A中我实现了onDestroy()(如果我实现onStop()会发生相同的事情)以保存用户选择的数据。如果我退回应用程序或通过按下主页并从任务管理器中删除它,如果用户再次启动应用程序,用户选择的数据仍然可见。

现在,在布局B中,首先我根据布局A的用户选择数据构建第一部分视图,然后我还有额外的按钮,允许用户根据需要添加和删除该布局的尽可能多的视图。

现在我的困惑................... 在用户填写布局B中需要的任何内容之后,然后返回到A,或退出应用程序,我想保存在布局B中输入的数据。我知道如何使用SharedPreferences保存数据但是我不知道哪些方法我需要为布局B实现,或者甚至可以为A完成我的任务。

这正是我想要发生的事情...... 我想要的是能够使用用户填充的布局B数据启动应用程序。布局A似乎正在运行。如果用户在布局A中选择相同的数据(意味着保留所有内容),那么我只想使用保存的数据,否则我想用用户的新选择重新启动新的布局B.

还有一个问题。如果用户从B回到布局A,由于所有内容都已保存在布局A中,他可以按下按钮并返回布局B(可能想要更改他/她选择的值或只是意外按下后退按钮)。我也为布局B实现了onDestroy(),但我遇到了问题。如果用户没有更改布局A中的选择并再次转到布局B,那么我保存的所有内容现在都会被重建,但是如果他/她回到A再次来到B,那么它就不存在了,每次都会发生这种情况...如果我来回走动,我会在奇怪的场合看到保存的数据,有时它不存在。

在布局B中,我将所有内容保存在onDestroy()中,然后onCreate()我检查布局A的数据是否相同,这样我就可以再次重建布局B.否则,布局B将是新的。

2 个答案:

答案 0 :(得分:1)

而不是使用onDestroy()/onCreate(),您最好使用onPause()/onResume(),因为这些总是被调用,但是在这里和那里可能会错过对onDestroy()的调用。 / p>

您需要在活动A和B中实施onPause()

一旦您弄清楚如何在onPause()中可靠地保存您的偏好设置,您可以根据应用程序逻辑在不需要时保留丢弃已保存的数据。

答案 1 :(得分:0)

onDestroy对于序列化数据来说太迟了。你不知道活动何时被销毁。

反正。你必须以某种方式调用活动B.为什么不直接将这些值作为额外内容传递给Intent?