相关疑难解决方法(0)

什么时候调用onSaveInstanceState()和onRestoreInstanceState()?

下图(来自官方文档)描述了Android活动的众所周知的生命周期:

在此输入图像描述

在另一方面,当活动是由系统(例如,由于存储器需要被回收的)破坏,该活动的状态有时自动地保存和恢复由所述方法的装置onSaveInstanceState()onRestoreInstanceState()由下图所示(也来自官方文件):

在此输入图像描述

我知道,onSaveInstanceState()不是总叫当活动即将被销毁.例如,如果由于用户按下"后退"按钮而导致销毁,则不会保留活动状态.但是在状态保存并恢复和onSaveInstanceState()/ onRestoreInstanceState()被调用的情况下,它们究竟何时被调用

例如,根据上面的图,onRestoreInstanceState()可以在之前onStart(),之后onStart()但之前onResume()或之后调用onResume().同样,存在几种可能性onSaveInstanceState().那他们什么时候打电话呢?

理想情况下,我希望看到一个组合图,显示活动生命周期状态和保存/恢复方法(如果存在).

android restore android-lifecycle android-activity

94
推荐指数
4
解决办法
5万
查看次数

savedInstanceState始终为null

这是我的savedInstaceState代码:

@Override
public void onSaveInstanceState(Bundle savedInstanceState) 
{
    savedInstanceState.putStringArrayList("todo_arraylist", Altodo);
    Log.v("bundle", "Saved");
    super.onSaveInstanceState(savedInstanceState);
}


public void onCreate(Bundle savedInstanceState) 
{
    super.onCreate(savedInstanceState);

    if (savedInstanceState != null) 
    {
        Altodo = savedInstanceState.getStringArrayList("todo_arraylist");
        Log.v("bundle", "Restored");
    }
    else
    {
        Log.v("bundle", "null");
    }

    setContentView(R.layout.main);
}
Run Code Online (Sandbox Code Playgroud)

日志始终显示"捆绑保存"标记.

但在onCreate方法中,SavedInstanceState始终为null.

android

68
推荐指数
4
解决办法
5万
查看次数

onCreate(Bundle savedInstanceState)始终为null

我知道,这个问题之前在stackoverflow上被问到,但是没有答案对我有用.

可能值得一提的是:

  • 我将ActionBarSherlock与支持包一起使用.
  • onSaveInstanceState我按下主页按钮时调用方法IS.该方法onCreate总是为NULL提供NULL Bundle savedInstanceState.
  • onRestoreInstanceState从来没有调用过方法.(我不介意,如果onCreate工作;)).
  • 另外(应该没关系)我试着把它放在super.onSaveInstanceState(outState)底部onSaveInstanceState.也没有运气.

这是代码.我希望有人有这个问题并解决了它.

public class MainActivity extends SherlockFragmentActivity {

    private static final String LOG_TAG = MainActivity.class.getSimpleName();

    private static String STATE_TO_STORE = "state_to_store";

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

        Log.d(LOG_TAG, "onCreate: savedInstanceState = " + (savedInstanceState == null ? "NULL" : "Not NULL"));

        // ... more code...
    }

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

        Log.d(LOG_TAG, "onRestoreInstanceState: savedInstanceState = " + (savedInstanceState == …
Run Code Online (Sandbox Code Playgroud)

android activity-lifecycle android-lifecycle

5
推荐指数
2
解决办法
2万
查看次数