Java onPause()还是onSaveInstanceState()更适合我的需要?

Java onPause()还是onSaveInstanceState()更适合我的需要?,java,android,bundle,onpause,Java,Android,Bundle,Onpause,我有一个应用程序,有三个页面,其中一个是主页。用户可以输入几个字段,如果用户转到两个子页面中的一个子页面,我会保存这些字段。我一直在研究onPause()和onSaveInstanceState()。我想我只是想对这两个问题有一个清楚的解释,如果onPause()更好,请给出一个代码示例。这就是我为onSaveInstanceState()所做的 这就是我设置bundle的方式,通过给它一个ID和一个值 public void onRestoreInstanceState(Bundle outS

我有一个应用程序,有三个页面,其中一个是主页。用户可以输入几个字段,如果用户转到两个子页面中的一个子页面,我会保存这些字段。我一直在研究onPause()和onSaveInstanceState()。我想我只是想对这两个问题有一个清楚的解释,如果onPause()更好,请给出一个代码示例。这就是我为onSaveInstanceState()所做的

这就是我设置bundle的方式,通过给它一个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");
这就是我打算反驳它的方式,问题是我不知道如何传递包来恢复它。我正在设置需要返回到UI设置的变量的变量

任何建议都很好


感谢初学者androider

您无需将捆绑包传递给自己:活动框架会解决这个问题。使用
onSaveInstanceState()
:如果您的活动类由于任何原因被系统破坏,它将被调用,因此您可以将逻辑放入其中<如果您退出活动,无论活动是否已销毁,都将始终调用code>onPause

我还想在您的
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");

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


请参见

如果我没有通过任何测试,我是否需要将捆绑包设置为全局?如果我在saveInstanceState()上这样做是多余的吗?我需要两者都做还是只选一个?捆绑包是为您提供的,与Android平台调用该方法的方式相同。你根本不需要做任何事情。没有全局变量,什么都没有。只需实现这两个方法,它们将在需要时被调用。Re“如果您的活动类因任何原因被系统破坏,它将被调用”。没有任何原因,但在OP的用例中,是的。不能依赖onSaveInstanceState获取任何真正重要的信息。
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");