onSaveInstanceState()中的传递变量在onDestroy中被清除

时间:2014-10-29 03:46:46

标签: android android-activity savestate

我问了这个问题:savedInstanceState.getParcelableArrayList() return empty list

但是现在,我发现这个问题与我的 onDestroy()方法有关。

我在 onSaveInstanceState()中保存名为 mVideos 的ArrayList并清除其中的所有内容

onDestroy (我认为这样可以在应用程序被杀死时节省内存)。

onCreate()中,我恢复已保存的 mVideos ,但它返回空列表

我的代码:

   @Override
    protected void onDestroy() {
        // TODO Auto-generated method stub
        super.onDestroy();

    if (mVideos != null)
        mVideos.clear();

    mVideos = null;
}

@Override
protected void onSaveInstanceState(Bundle out) {
    // TODO Auto-generated method stub

    out.putParcelableArrayList(VIDEO_LIST, mVideos);
    super.onSaveInstanceState(out);
}

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

    if (savedInstanceState != null) {
        ArrayList<Video> saved = savedInstanceState.getParcelableArrayList(VIDEO_LIST);
       Log.e(VIDEO_LIST, "Count: " + saved.size());
    }
}

- &GT; saved.size()= 0 。如果我删除onDestroy()中的 mVideos.clear(),它可以正常工作

我知道在onPause()之后立即调用onSaveInstanceState()。但为什么在这种情况下,为什么onDestroy

对保存变量的影响?

1 个答案:

答案 0 :(得分:1)

我认为,在onSaveInstanceState Android中将指针保存到内存区域,因此当您调用 mVideos.clear()时,该内存区域为清除,当您尝试恢复它时,它会返回一个空列表。