栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Android中getActivity()为null

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Android中getActivity()为null

通过bugly,追踪到一个崩溃,发现问题为在Fragment里getActivity()为null后崩溃。

于是,深层次找原因。

发现根本原因为:JVM在内存不足的情况下,会把Activity回收;而frament和Activity的声明周期不一致,此时frament不一定会被回收;因此,才导致getActivity()为null的问题。

Activity生命周期如下:

Fragment的生命周期如下:

因此,可以用的解决方法是:对Activity添加引用,保证Acitivity不被销毁。

添加引用方法为:

1)在onAttach时添加引用;

2)在onDetach时销毁引用。

代码如下:

public class MyFragment extends Fragment {
    protected FragmentActivity mActivity; //可以用的引用

    @Override
    public void onAttach(Context context) {
        super.onAttach(context);

        //添加引用
        if (context instanceof Activity){
            mActivity =(FragmentActivity) context;
        }
    }

    @Override
    public void onDetach() {
        super.onDetach();

        //销毁引用
        mActivity = null;
    }
}

在子Fragment里,可以直接用protected类型的mActivity。

当然,也可以用单例或者其他的方法,方法均是避免Activity被回收。

PS:目前主流Android开发,很大一部分是是JAVA开发;JAVA的JVM机制,在带来开发的便利的同时,也带来了各种不变。在开发的时候,应该注意JVM机制,才可以在Android的JAVA开发上走得更远。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/733093.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号