问题:

  1. 使用 AS 在 Fragment 中调用 getActivity() 方法的时候会出现可能为空指针的提醒
  2. 使用 monkey 多次十万次测试,会出现 getActivity() NullPointException 的情况

思考

  • 为什么会出现这种情况,按说当前 Activity 存在,在 Fragment 中使用 getActivity() 是可以拿到的,不应该为空的

源码

  1. fragment 的生命周期

  2. 以下源码基于 API 26

    1. getActivity 可能为 Null, 跟进源码,可以看到 getActivity() 是通过 mHost 成员变量获取 activity ,假如 mHost 为 null , 就返回一个 Null 。
        final public Activity getActivity() {
    return mHost == null ? null : mHost.getActivity();
    }
    1. 那成员变量 mHost 是什么呢?什么时候赋值的?

      • mHost: 抽象类 android.app.FragmentHostCallback,继承之: android.app.FragmentContainer
      • mHost 传入,是在 Activity 初始化的时候传入的,源码如下:
    2. 当调用 getActivity() 的时候,Fragment 已经 onDetach() 从 Activity 中。所以会造成空指针。

解决办法

  • 在 BaseFragment 的 onAttach() 方法中获取 Activity 并赋值给成员变量,然后在需要使用 getActivity() 的地方使用该成员变量就可以了。

参考

https://blog.csdn.net/zqx198810/article/details/24203989?utm_source=tuicool&utm_medium=referral

https://blog.csdn.net/u010897392/article/details/17073605

Fragment 源码启动:https://www.jianshu.com/p/f2fcc670afd6

getActivity() 空指针部分:https://www.jianshu.com/p/d9143a92ad94

Android 在 Fragment 中使用 getActivity() NullPointException 的思考和解决办法的更多相关文章

  1. 经测试稳定可用的蓝牙链接通信Demo,记录过程中遇到的问题的思考和解决办法,并整理后给出一个Utils类可以简单调用来实现蓝牙功能

    说明:这是本人在蓝牙开发过程中遇到过的问题记录和分析,以及解决办法. 在研究过程中,许多的前人给出的解决方案和思路指导对我相当有帮助,但并非都是可采取的解决方法, 经过本人对这些方法的测试和使用过后, ...

  2. Android 在Fragment中修改Activity中的控件

    在当前的Fragment中调用getActivity方法获取依附着的那个Activity,然后再用获取到的Activity去findViewById拿到你需要的控件对其操作就行了.

  3. [转]iOS Safari 中click点击事件失效的解决办法

    iOS Safari 中click点击事件失效的解决办法 问题起因: 在微信公众号开发(微站)过程中用jquery的live方法绑定的click事件点击无效(不能执行) 问题描述 当使用委托给一个元素 ...

  4. python matplotlib plot 数据中的中文无法正常显示的解决办法

    转发自:http://blog.csdn.net/laoyaotask/article/details/22117745?utm_source=tuicool python matplotlib pl ...

  5. eclipse中的js文件报错的解决办法

    在使用别人的项目的时候,导入到eclipse中发现js文件报错,解决办法是关闭eclipse的js校验功能. 三个步骤: 1. 右键点击项目->properties->Validation ...

  6. 配置IIS提示打开目录浏览时的问题:未能从程序集“System.ServiceModel, Version=3.0.0.0”中加载类型“System.ServiceModel.Activation.HttpModule” 的解决办法

    错误消息: 未能从程序集“System.ServiceModel, Version=3.0.0.0”中加载类型“System.ServiceModel.Activation.HttpModule” 的 ...

  7. Spring MVC普通类或工具类中调用service报空空指针的解决办法(调用service报java.lang.NullPointerException)

    当我们在非Controller类中应用service的方法是会报空指针,如图: 这是因为Spring MVC普通类或工具类中调用service报空null的解决办法(调用service报java.la ...

  8. linux中没有dos2UNIX或者UNIX2dos命令怎么解决办法

    linux中没有dos2UNIX或者UNIX2dos命令怎么解决办法 http://blog.csdn.net/w616589292/article/details/38274475 dos2unix ...

  9. Xamarin中VS无法连接Mac系统的解决办法

    Xamarin中VS无法连接Mac系统的解决办法 按照以下步骤排查:(1)确认Mac系统中安装Xamarin.iOS开发必备的组件,如Mono.Xamarin.iOS.(2)将Windows和Mac下 ...

随机推荐

  1. U盘装机教程

    http://winpe.uqidong.asia/upzxpxt/upzxpxt.html

  2. go语言中goroute使用:=遇到的坑

    先看下源代码,预想从1至N总取出所有能被a或b整除的正整数之和,为了利用go语言的并行优势,特使用goroute特性来实现,同时使用普通顺序计算进行效率比较分析 package chango impo ...

  3. mysql中的用法 count group by having

    1 语法: group by 字段 having 条件判断; group by的用法我已经在上一篇经验中介绍了 2 还是已员工绩效表为例   3 我们如果就是查询每个部门成绩大于89的员工数,可以这样 ...

  4. NTFS的交换数据流ADS应用

    NTFS的交换数据流ADS应用   NTFS是Windows常用的文件系统格式.该格式支持交换数据流(Alternate Data Streams,缩写ADS)特性.该特性可以让多个文件流使用同一个文 ...

  5. [ 原创 ] Centos7.6安装Mysql5.7

    https://blog.csdn.net/shj_php/article/details/86712408 CentOS7下安装MySQL5.7安装与配置(YUM) http://blog.csdn ...

  6. Python3Numpy——相关性协方差应用

    基本理论 Correlation Are there correlations between variables? Correlation measures the strength of the ...

  7. Flask信号源码流程

    1. appcontext_pushed = _signals.signal('appcontext-pushed'# 请求app上下文push时执行 return RequestContext(se ...

  8. 部分手机(如三星)的Listview列表会自动加上黑线解决办法

    部分手机(如三星)的Listview列表会自动加上黑线,这里将其去掉部分手机(如三星)的列表会自动加上黑线. 因为三星手机会自动加上分割线. // 部分手机(如三星C9 Pro)的设置项列表会自动加上 ...

  9. android 6.0 动态权限

    Android 6.0 动态权限: 除了要在AndroidManifest.xml中申请外,还需使用时,请求用户允许授权. 以下是需要单独申请的权限,共分为9组,每组只要有一个权限申请成功了,就默认整 ...

  10. C++学习笔记41:进程调度

    进程调度策略:先进先出,时间片轮转,普通调度,批调度,高优先级抢先 子进程与父进程的调度没有固定的顺序:不能假设子进程一定会在父进程之后执行,也不能假设子进程一定会在父进程之前执行: 僵尸进程 子进程 ...