onRestoreInstanceState() 究竟是如何工作的?

Really how onRestoreInstanceState() works?

我需要你的帮助。我正在制作一个应用程序,我使用方法 onSaveInstanceState()onRestoreInstanceState(),但第二种方法不起作用。

我可以看到按下主页按钮时程序如何访问 onSaveinstancestate(),但是当我 return 到应用程序时,代码不会调用 onRestoreInstanceState()onCreate().

因此,应用程序从头开始。我不知道原因...你能帮我吗?

这是我的代码:

public class MainActivity extends ActionBarActivity {

MyView myView;

protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        myView = new MyView(this);
        setContentView(myView);

    if (savedInstanceState != null) {
        myView .SetScore(savedInstanceState.getInt("Id"));
        myView .SetNivel(savedInstanceState.getInt("Valor"));  
    }
} 

.....

 @Override
    protected void onRestart(){
        super.onRestart();
        myView = new MyView(this);
        setContentView(myView );
    }

@Override
protected void onRestoreInstanceState(Bundle savedInstanceState){
    super.onRestoreInstanceState(savedInstanceState);
    if (savedInstanceState != null) {
        myView.SetScore(savedInstanceState.getInt("Id"));
        myView.SetNivel(savedInstanceState.getInt("Valor"));
   }
}

@Override
protected void onSaveInstanceState(Bundle savedInstanceState){
    savedInstanceState.putInt("Score",myView.GetId());
    savedInstanceState.putInt("Nivel",muView.GetValor());
    super.onSaveInstanceState(savedInstanceState);
}
}

尝试使用带有 setRetainInstance(true) 的片段。

已编辑

像在 Activity.

中那样在 Fragment(http://developer.android.com/guide/components/fragments.html) 中声明所有 UI
public static class ExampleFragment extends Fragment {
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup Bundle savedInstanceState) {
        setRetainInstance(true);
        return new MyView(getActivity());
    }
}

public static class MainActivity extends ActionBarActivity {
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        getSupportFragmentManager().beginTransaction().add(new ExampleFragment(), R.id.layout_where_you_want_to_display_fragment).commit();
    }
}

当系统开始停止您的 activity 时,它会调用 onSaveInstanceState() 以便您可以指定要保存的其他状态数据,以防必须重新创建 Activity 实例。如果 activity 被销毁并且必须重新创建相同的实例,系统会将定义的状态数据传递给 onCreate() 方法和 onRestoreInstanceState() 方法。

你可以检查这个https://developer.android.com/training/basics/activity-lifecycle/recreating.html

您可以看到在您的方法中使用 Toast 会发生什么。

并检查这个

onRestoreInstanceState(...) 只有在 activity 在后台被销毁时才会被调用。如果您打开 "don't save activities" 开发者选项,您可以强制执行此操作。

但这并不能解释为什么您的应用程序似乎从头开始重新启动。你确定你正在正确恢复数据吗?添加一些登录 onRestoreInstanceState(...) 以确保它被调用并做正确的事情。你确定你没有在不应该去的地方打电话给 finish(),比如 onPause()?