gpt4 book ai didi

android - 方向改变的上下文和 fragment

转载 作者:行者123 更新时间:2023-11-29 22:03:07 24 4
gpt4 key购买 nike

我正在使用 Fragment 兼容包。

在我的 onAttach fragment 中,我保留了一个 Context 引用。

public void onAttach(Activity activity) {
super.onAttach(activity);
Log.w(logTag, "Activity is: " + activity);
mContext = activity;
Log.w(logTag, "mContext is: " + mContext); // <-- Breakpoint here
}

稍后,我使用上下文

private String loadExampleSuccessXML () {
try {
AssetManager assets = this.mContext.getAssets(); // <-- Breakpoint here
//Other Stuff

当我改变方向时,onAttach 似乎存储了新的上下文,但是当我到达 loadExampleSuccessXML 时,mContext 为空。

mContext 保存在 onAttach 和 mContext.getAsssets() 之后,我有断点。

当我第一次运行应用程序时,调试器显示 mContext 的值:

onAttach() 中,mContext [MyActivity] (id=830010419632)

loadExampleSuccessXML() 中,mContext [MyActivity] (id=830010419632)

但是在配置更改之后

onAttach() 中,mContext [MyActivity] (id=830010565472)

loadExampleSuccessXML()中,mContext为空

我不明白为什么。任何帮助都会很棒。

最佳答案

您能否提供更多关于为什么需要维护对上下文的引用的详细信息?至少这从来都不是我们应用程序的要求,并且已被证明(尽管在您发布的代码中不是您的情况)是 Android 内存泄漏的罪魁祸首...

如果您需要维护先前 Activity 状态的某个方面,那么我建议使用 onSavedInstanceState()。在这里您可以传递一些简单的属性(比如我在列表中最后选择的项目的 ID)。 list 配置修复通常是错误的方法,尽管它在诸如此类的帮助站点上很流行。您可能不希望这样。

最后,考虑使用 setRetainInstance(true)...再次强调,根据我们的经验,如果使用不当,这是非常危险的方法!这可能只是我们的问题,但至少最近的 android.support.v4.* 库确实存在一些错误。当设置为 true 时,这确保 fragment 永远不会被破坏(即 onDestroy() 被调用),而只是附加和分离,因为欠 Activity 在旋转时被破坏并重新创建.它会解决您的问题,但请阅读有关它的用法的文档……一些副作用非常微妙。

关于android - 方向改变的上下文和 fragment ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11467796/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com