【问题标题】:Passed variable in onSaveInstanceState() is cleared in onDestroyonSaveInstanceState() 中传递的变量在 onDestroy 中被清除
【发布时间】:2014-10-29 03:46:45
【问题描述】:

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

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

我将名为 mVideos 的 ArrayList 保存在 onSaveInstanceState() 中并清除其中的所有项目

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());
    }
}

--> saved.size() = 0。如果我在 onDestroy() 中删除 mVideos.clear() 它可以正常工作

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

对已保存变量的影响?

【问题讨论】:

    标签: android android-activity savestate


    【解决方案1】:

    我认为,在onSaveInstanceStateAndroid 中保存了一个指向内存区域的指针,所以当您调用mVideos.clear() 时,该内存区域正在清除,当您尝试恢复它时,它会返回一个空列表。

    【讨论】:

    • 是的,您有什么建议吗?
    • 我建议您不要清除列表并将其设置为空。如果 Android 认为它没有足够的内存,它会自动销毁你的列表:) 不用管它。
    • 我想过这个。我应该继续寻找其他更好的解决方案:)
    • 另一种解决方案是将您的列表存储在数据库或 SharedPreferences 中,然后您将能够清除您的列表。但是我认为,如果您没有看到手机的不良行为,那就忘掉它吧:D
    • 补充问题:你知道为什么旋转屏幕会调用onSaveInstanceState(),但是如果我们按BACK键退出应用程序,这个方法永远不会被调用吗?
    猜你喜欢
    • 2013-08-20
    • 1970-01-01
    • 1970-01-01
    • 2016-06-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-04
    • 1970-01-01
    相关资源
    最近更新 更多