2016-03-03 136 views
1

当我成功地将数据保存到onSaveInstanceState方法中的Bundle时,我找不到为什么saveInstanceState在onCreate方法中始终为null。 当我在AVD上运行程序并单击后退按钮(销毁活动),然后通过单击其图标再次创建它时,保存的状态始终为空。 这是一个测试这个问题的简单程序。单击后退按钮后重新创建活动状态

package com.example.myTestApp; 

import android.app.Activity; 
import android.os.Bundle; 
import android.widget.Button; 

public class MyActivity extends Activity { 
    /** 
    * Called when the activity is first created. 
    */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 
     Button button = (Button)findViewById(R.id.button); 
     if(savedInstanceState == null){ 
      button.setText("No"); 
     }else{ 
      button.setText("Yes"); 
     } 
    } 

    static final String STATE_SCORE = "playerScore"; 
    static final String STATE_LEVEL = "playerLevel"; 
    private int mCurrentScore = 1; 
    private int mCurrentLevel = 2; 


    @Override 
    public void onSaveInstanceState(Bundle savedInstanceState) { 
     super.onSaveInstanceState(savedInstanceState); 

     savedInstanceState.putInt(STATE_SCORE, mCurrentScore); 
     savedInstanceState.putInt(STATE_LEVEL, mCurrentLevel); 

    } 
} 

请告诉我如何解决这个问题,如果可能的话。

回答

2

这是预期的。当你回头时,活动被破坏,它所拥有的数据丢失。在此之后,当您重新打开应用程序时,您将始终在包中创建一个新的新实例。

当由于某些更改(如循环)或长时间在后台暂停活动而重新创建活动时,将使用Bundle savedInstanceState。

如果你想保留一些数据,可以考虑SharedPreferences的一些小东西,或者一个数据库(SQLite,Realm)或大型文件。

+0

那么如何在这种情况下存储数据呢? – OrdinaryProgrammer

+0

在SharedPreferences中保留数据。 – Francesc

+0

好的,非常感谢:) – OrdinaryProgrammer