当前位置: 首页 > 编程笔记 >

Android getActivity()为空的问题解决办法

夏长卿
2023-03-14
本文向大家介绍Android getActivity()为空的问题解决办法,包括了Android getActivity()为空的问题解决办法的使用技巧和注意事项,需要的朋友参考一下

Android getActivity()为空的问题解决办法

  在开发项目中有时会碰到getActivity函数为空的情况,    导致apk空指针崩溃问题,  看代码逻辑没有明显的原因。

       如果看Activity.Java、FragmentActivity.java的源码就可以找到原因。 当activity实例在后台时, 系统在回收资源时很可能回收掉Activity,  并在onSaveInstanceState函数里保存fragment的状态, 再次打开该Activity时, 在onCreate方法里取出bundle里的fragment状态, 但这时fragment对应的Activity早就不在了, 所以getActivity为空。

摘自FragmentActivity.java:       

 protected void onCreate(Bundle savedInstanceState) {
         .......
         if (savedInstanceState != null) {
             Parcelable p = savedInstanceState.getParcelable(FRAGMENTS_TAG);
             mFragments.restoreAllState(p, nc != null ? nc.fragments : null);
         }

         mFragments.dispatchCreate();
     }

     protected void onSaveInstanceState(Bundle outState) {
        super.onSaveInstanceState(outState);
        Parcelable p = mFragments.saveAllState();
       if (p != null) {
          outState.putParcelable(FRAGMENTS_TAG, p);
        }
     }

从源码可以看出解决方案: 1、  覆盖onSaveInstanceState函数, 不保存到bundle; 2、  覆盖onCreate方法, 删除FRAGMENTS_TAG参数。(注意:Activity和FragmentActivity对FRAGMENTS_TAG的定义不同)

     例如: 

public class TestActivity extends FragmentActivity {     
       @Override
       protected void onCreate(Bundle savedInstanceState) {
           if (savedInstanceState != null) {
               savedInstanceState.remove("android:support:fragments");  //注意:基类是Activity时参数为android:fragments, 一定要在super.onCreate函数前执行!!!
           }
           super.onCreate(savedInstanceState);
          ...
       }

       //或者
       protected void onSaveInstanceState(Bundle outState) {
           //super.onSaveInstanceState(outState);  //注释掉该方法, 即不保存状态
       }
   

以上就是Android getActivity()为空的问题解决办法的讲解,如有疑问请大家留言或到本站社区讨论,感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

 类似资料:
  • 本文向大家介绍C# SESSION丢失问题的解决办法,包括了C# SESSION丢失问题的解决办法的使用技巧和注意事项,需要的朋友参考一下 我们在用C#开发程序的时候经常会遇到Session很不稳定,老是数据丢失。下面就是Session数据丢失的解决办法希望对您有好处。 1、在WEB.CONFIG文件中修改SESSION状态保存模式,如:<sessionState mode='StateServe

  • 本文向大家介绍解决golang json解析出现值为空的问题,包括了解决golang json解析出现值为空的问题的使用技巧和注意事项,需要的朋友参考一下 我是通过beego框架,将请求过来的json进行解析,并将值保存在结构体中 其中 UpdateCommentRequestData的结构是这样的 common.request的结构是这样的 我使用1中的代码进行解析,发现request.Id的值

  • 本文向大家介绍如何解决redisTemplate注入为空问题,包括了如何解决redisTemplate注入为空问题的使用技巧和注意事项,需要的朋友参考一下 springboot2.*集成redis时,redis工具类中的redisTemplate注入后总是为空。 问题代码还原:   1、工具类定义成静态工具类,@Resource注入redisTemplate   2、控制层直接调用工具类的静态方法

  • 本文向大家介绍UEditor编辑文章出现多余空行问题的解决办法,包括了UEditor编辑文章出现多余空行问题的解决办法的使用技巧和注意事项,需要的朋友参考一下 新写的网站用UEditor做编辑器,结果发现每次编辑完都会多出首尾空行,像这样: 然后看了下自己植入编辑器时的写法,发现了问题所在。 在container中,<?=$info['content']>的前后各有一次回车,而ueditor将这2

  • 本文向大家介绍Mysql闪退问题图文解决办法,包括了Mysql闪退问题图文解决办法的使用技巧和注意事项,需要的朋友参考一下 之前在使用MySQL 5.5 Command Line Client时, 无论输入什么密码,都出现闪退的情况,后来查找资料才发现原来是之前使用360时,将mysql服务给关了,现将解决办法总结如下: 1.桌面找到计算机-->右键选择管理; 2.在管理页面点击服务,展开服务项;

  • 本文向大家介绍Android getBackground().setAlpha遇到问题解决办法,包括了Android getBackground().setAlpha遇到问题解决办法的使用技巧和注意事项,需要的朋友参考一下 Android getBackground().setAlpha遇到问题解决办法 前言: 使用getBackground().setAlpha,导致其他布局背景透明度都改变的问

  • 本文向大家介绍Nginx 499错误问题及解决办法,包括了Nginx 499错误问题及解决办法的使用技巧和注意事项,需要的朋友参考一下 Nginx简介 Nginx ("engine x") 是一个高性能的HTTP和反向代理服务器,也是一个IMAP/POP3/SMTP服务器。Nginx是由Igor Sysoev为俄罗斯访问量第二的Rambler.ru站点开发的,第一个公开版本0.1.0发布于2004

  • 本文向大家介绍Android Studio卡很久(loading)的问题解决办法,包括了Android Studio卡很久(loading)的问题解决办法的使用技巧和注意事项,需要的朋友参考一下 Android Studio卡很久(loading)的问题 关于Android Studio卡在某个地方很久(更准确说应该是Loading很久)的问题,大多是因为可能在下载Gradle或者在连接其他需要f