2

我有一个包含三个页面的应用程序,其中一个是主页。如果用户转到两个子页面之一,用户可以输入一些我想保存的字段。我一直在研究 onPause() 和 onSaveInstanceState()。我想我只想对这两者有一个清晰的解释,以及 onPause() 是否更好以及代码示例。这就是我对 onSaveInstanceState() 的看法。

protected void onSaveInstanceState(Bundle outState) {
    // Save away the original text, so we still have it if the activity
    // needs to be killed while paused.

    outState.putDouble("quizPts",qpts);
    outState.putDouble("quizV",qvalue);
    outState.putDouble("tPts",tpts);
    outState.putDouble("tValue", tvalue);
    outState.putDouble("hPts", hpts);

这就是我设置捆绑包的方式,通过给它一个ID和一个值。

public void onRestoreInstanceState(Bundle outState) {
  super.onRestoreInstanceState(outState);
  // Restore UI state from the savedInstanceState.
  // This bundle has also been passed to onCreate.
  qpts = outState.getDouble("quizPts");
  qvalue = outState.getDouble("quizV");
  tpts = outState.getDouble("tPts");
  tvalue = outState.getDouble("tValue");
  hpts = outState.getDouble("hPts");

这就是我计划恢复它的方式,问题是我不明白如何传递 Bundle 来恢复它。我正在设置我需要返回到设置到 UI 的变量的变量。

任何建议都会很棒

感谢初学者androider

4

2 回答 2

1

最好的选择是共享偏好。当应用程序由于电话或其他原因暂停时,onpause 旨在解决您的问题。但是,如果您使用共享首选项,它会为您提供保存数据的方法,并在保存的值不可用时使用默认值恢复它。此数据将在用户会话中持续存在(即使您的应用程序被终止)。但是,如果您打算保存除原始数据类型(如 bool、int 等)以外的其他内容,这不是一个好的选择。

http://developer.android.com/guide/topics/data/data-storage.html#pref

于 2011-06-28T03:20:31.503 回答
0

您不需要在自己周围传递捆绑包:Activity 框架会处理这些。使用onSaveInstanceState():如果您的 Activity 类因任何原因被系统销毁,它将被调用,因此您应该可以将逻辑放在那里。onPause如果您离开 Activity,无论 Activity 是否被销毁,都将始终调用它。

我还会在您的onRestoreInstanceState

public void onRestoreInstanceState(Bundle outState) {
  super.onRestoreInstanceState(outState);
  // Restore UI state from the savedInstanceState.
  // This bundle has also been passed to onCreate.
  if(outState.containsKey("quizPts")) qpts = outState.getDouble("quizPts");
  if(outState.containsKey("quizV")) qvalue = outState.getDouble("quizV");
  if(outState.containsKey("tPts")) tpts = outState.getDouble("tPts");
  if(outState.containsKey("tValue")) tvalue = outState.getDouble("tValue");
  if(outState.containsKey("hPts")) hpts = outState.getDouble("hPts");
于 2011-06-28T03:18:27.243 回答