Java 保存Pause上所有数据信息的最佳方法

Java 保存Pause上所有数据信息的最佳方法,java,android,Java,Android,我正在制作一个应用程序,我想创建一个选项来暂停应用程序活动并移动到另一个活动,这将允许返回并恢复游戏 我的应用程序是由一个类构建的,该类与几个VAR和其他一些较小的类联系在一起,我想知道保存所有这些数据以恢复并继续游戏的最佳方法是什么? 游戏由以下部分组成: public class snake { int[][] board; part head; LinkedList<part> full = new LinkedList<part>();

我正在制作一个应用程序,我想创建一个选项来暂停应用程序活动并移动到另一个活动,这将允许返回并恢复游戏 我的应用程序是由一个类构建的,该类与几个VAR和其他一些较小的类联系在一起,我想知道保存所有这些数据以恢复并继续游戏的最佳方法是什么? 游戏由以下部分组成:

public class snake {
    int[][] board;
    part head;
    LinkedList<part> full = new LinkedList<part>();
    box box ;
    int count;
    int currx,curry;
}
公共类snake{
int[][]董事会;
部分头部;
LinkedList full=新建LinkedList();
盒子;
整数计数;
咖喱;
}

在android中,有两种方法可以以捆绑形式存储数据:

  • android中的共享首选项保存创建新捆绑包并将当前状态保存在
    onStart()
    方法中,并在
    onResume()中还原
  • 已在onSaveInstanceState中保存状态
这些方法在安卓系统中起着导向作用。我认为这是可行的:

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

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

您可以使用以下几种方法:

SQLite、SharedReferences、FileInput和FileOutput流,可能只是您想要保存的活动暂停的简单意图

尝试以下简单方法:

intent.setFlags(intent.FLAG\u ACTIVITY\u SINGLE\u TOP);
或
intent.setFlags(intent.FLAG\u ACTIVITY\u CLEAR\u TOP);
然后使用

intent.setFlags(intent.FLAG\u活动\u新任务)当活动失去焦点时,将调用
onSaveInstanceState()
。这是保存您的状态的地方:

private static final String GAME_STATE_KEY = "game_state";

private snake state;

@Override
public void onSaveInstanceState(Bundle outState) {

    super.onSaveInstanceState(outState);        

    outState.putSerializable(GAME_STATE_KEY, state);
}
当用户导航回您的活动时,您可以在
onCreate()
中恢复状态。有关参考信息,请参阅

@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {

    if (savedInstanceState != null) {
        state = (snake) savedInstanceState.getSeriazable(GAME_STATE_KEY);
    }
    else {
        state = new snake();
    }
}

当然,您需要使
snake
以及它包含的其他自定义类(
part
box
),
可序列化。例如,
类snake实现了可序列化

您需要将数据放在bundle object上如何在android中以bundle的形式保存数据,然后将其还原?是的,这是可能的,因为根据活动生命周期,活动一处于onPause()状态,而返回到活动一的第二个活动是OnResume()方法是call。我试图使用您编写的代码,但它似乎不起作用。我需要做任何更改才能起作用吗?因为它将活动创建为新活动,并且没有恢复任何信息Bro,因为您还需要根据要求更改代码。我给您的只是一个想法。请给我完整的代码,我将根据您的要求更新您。杜德,为什么要序列化而不是打包?@MarcosVasconcelos,因为这样更容易。实现
Parcelable
需要更多的努力和时间,在这种情况下,它没有意义,因为少量数据需要序列化。它在outState.put(GAME_STATE_KEY,STATE)上表示“无法解析方法”put(java.lang.String,com.example.pc.snake.snake);(GAME_STATE,STATE)any ideahy?@user3710700抱歉,这是
putSerializable()
。我已经更新了答案。出于某种原因,在我单击其他活动上的“继续”并返回此活动后,它仍然会转到onCreate并创建新类,我如何避免它?