繁体   English   中英

Android-getActivity和Activity生命周期

[英]Android - getActivity and Activity life cycle

如果片段中包含以下代码:

public void doSomething() {
    if (getActivity() == null)
        return; // no null pointer exceptions here!
    // ...
    // do bunch of stuff here
    // ...

    getActivity().setTitle("done something"); // just whatever
}

如您所见,在方法开始时,我检查getActivity()是否为null,如果是,则返回。 但是,如果它不为null,则该方法继续执行。 最后,我再次调用getActivity()设置标题,但是我不检查getActivity()是否为null。 从理论上讲,这时有可能将Fragment与Activity分离,因此getActivity()可能为null,因此最后一行将抛出NullPointerException。 有什么解决方案? 每次我要调用getActivity()时是否检查它是否为null?

编辑:即使我们尝试这样做,也有可能获得NPE-我每次都只调用getActivity()来简化示例:

public void doSomething() {
    Activity activity = getActivity();
    if (activity == null)
        return; // no null pointer exceptions here!
    // ...
    // do bunch of stuff here
    // ...

    activity.setTitle("done something"); // just whatever
}

问题不在于活动尚未完成加载-例如,加载后几分钟就可能发生,作为对任何事件的响应。 问题不是对getActivity的第一次调用,而是从检查活动是否为null到上一次引用该活动的15行左右,它不再存在。

我现在没有logcat,但这是正在发生的事情。 我们自己还没有真正看到它,但是这是针对每天要调用数千次此功能的应用程序,因此有时可能会不时发生。

编辑2:我目前正在做的是尝试并捕获NPE,如果失败则不做任何事情。 但是,这似乎是解决问题的丑陋方法-我想知道是否有更好的解决方案!

在顶部调用一次getActivity并将其保存在变量中。 为什么在它之间不改变的情况下调用它20次(如果确实如此,则无论如何将新旧混合使用都是很糟糕的)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM