问题:

  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

最新文章

  1. Cleave.js – 自动格式化表单输入框的文本内容
  2. H5项目常见问题汇总及解决方案(果断复制粘贴,不解释)
  3. Leetcode Valid Sudoku
  4. R12.2 URL Validation failed. The error could have been caused through the use of the browser's navigation buttons
  5. Goppa code
  6. Java集合——题目
  7. 阿里Linux Shell脚本面试25个经典问答
  8. B/S和C/S的区别
  9. sun X509/X500Name异常(已解决)
  10. ueditor1.4.3 在IE8下的 BUG
  11. C# 文件的上传和下载
  12. 项目中遇到angular时间插件datetinepicker汉化问题
  13. 09-JS的事件流的概念(重点)
  14. linq标准查询运算符
  15. 微信小程序星星评价
  16. java中HashMap的基本方法使用
  17. jquery判断某个属性是否存在 hasAttr
  18. cscope无法索引代码树之外的软链接
  19. linux文件简单操作
  20. 【转】C# 视频监控系列(13):H264播放器——控制播放和截图

热门文章

  1. 练习|Django-单表
  2. Python学习——Python线程
  3. flask第十篇——url_for【3】
  4. hihoCoder挑战赛19 A.Rikka with Sequence(状压DP)
  5. eclipse中出现的一些错误
  6. __NSCFNumber isEqualToString:]: unrecognized selector sent to instance 0xb000000000000003
  7. 【3dsmax2016】安装图文教程、破解注册以及切换语言方法
  8. jsp get参数乱码问题
  9. DAC Essentials
  10. linux 内核 内存管理 slub算法 (一) 原理