【问题标题】:Why does my Android onRestoreInstanceState method never get called eventough I save the activity state?为什么即使我保存了活动状态,我的 Android onRestoreInstanceState 方法也不会被调用?
【发布时间】:2016-04-11 08:19:17
【问题描述】:

我有一个表面视图 gameView,它被加载到这个 GameViewActivity 中。
我在 onSaveInstanceState 方法中保存了一些值。 当我离开此活动并返回时,再次调用 OnCreate(),将我的活动恢复到其原始状态 并且永远不会调用 onRestoreInstanceState。

最重要的是,当我检查传递给 OnCreate 方法的 Bundle 时,它​​始终为空。任何想法,我非常卡在这里?

public class GameViewActivity extends AppCompatActivity {


private int player;

private GridView grid1;
private GridView grid2;

private GameView gameView;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);


    try {
        grid1 = new GridView(Constants.NUMBER_COLUMN_TILES, Constants.NUMBER_ROW_TILES);
        grid2 = new GridView(Constants.NUMBER_COLUMN_TILES, Constants.NUMBER_ROW_TILES);
    } catch(Exception e){
        e.printStackTrace();
    }

    this.player = 1;
    gameView = new GameView(this, "sea", grid1);

    setContentView(gameView);

}



@Override
protected void onSaveInstanceState(Bundle outState) {

    super.onSaveInstanceState(outState);

    outState.putSerializable("tiles_player1", grid1.getTiles());
    outState.putSerializable("tiles_player2", grid2.getTiles());
    outState.putInt("player", player);

}


@Override
protected void onRestoreInstanceState(Bundle savedInstanceState) {
    super.onRestoreInstanceState(savedInstanceState);

    grid1.setTiles((HashMap<Coordinate,GameTile>) savedInstanceState.get("tiles_player1"));
    grid2.setTiles((HashMap<Coordinate,GameTile>) savedInstanceState.get("tiles_player2"));

    player = (int)savedInstanceState.get("player");
}

【问题讨论】:

    标签: android android-activity


    【解决方案1】:

    onSaveInstance/onRestoreInstance 旨在仅在系统终止活动时存储活动状态(例如,当应用程序处于后台时内存不足)。因此,如果您通过向后导航离开活动(例如,通过按下后退按钮) - 当您再次打开活动时,它不会调用 onSaveInstanceState 和 onRestoreInstanceState。相反,您应该将活动数据保存在 SharedPreferences 或 sqlite 或文件中(比如说在 onStop() 方法中)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-01-30
      • 2018-04-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多