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()为空的问题解决办法的讲解,如有疑问请大家留言或到本站社区讨论,感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!
# Android
# getActivity()为空
# getActivity()
# null
# 解决办法
# Android中getActivity()为null的解决办法
# 为空
# 如有
# 中有
# 并在
# 请大家
# 希望能
# 很可能
# 可以看出
# 谢谢大家
# 开发项目
# 就可以
# 不在了
# 不保存
# 或到
# 即不
# 里取出
# 台时
# fragment
# onSaveInstanceState
相关文章:
html制作网站的步骤有哪些,iapp如何添加网页?
建站主机类型有哪些?如何正确选型
建站之星云端配置指南:模板选择与SEO优化一键生成
c# Task.Yield 的作用是什么 它和Task.Delay(1)有区别吗
怀化网站制作公司,怀化新生儿上户网上办理流程?
新网站制作渠道有哪些,跪求一个无线渠道比较强的小说网站,我要发表小说?
济南网站建设制作公司,室内设计网站一般都有哪些功能?
PHP 500报错的快速解决方法
佛山企业网站制作公司有哪些,沟通100网上服务官网?
移民网站制作流程,怎么看加拿大移民官网?
设计网站制作公司有哪些,制作网页教程?
建站之星如何修改网站生成路径?
小说建站VPS选用指南:性能对比、配置优化与建站方案解析
哈尔滨网站建设策划,哈尔滨电工证查询网站?
如何构建满足综合性能需求的优质建站方案?
c# F# 的 MailboxProcessor 和 C# 的 Actor 模型
建站之星后台搭建步骤解析:模板选择与产品管理实操指南
免费公司网站制作软件,如何申请免费主页空间做自己的网站?
国美网站制作流程,国美电器蒸汽鍋怎么用官方网站?
郑州企业网站制作公司,郑州招聘网站有哪些?
微信网站制作公司有哪些,民生银行办理公司开户怎么在微信网页上查询进度?
合肥做个网站多少钱,合肥本地有没有比较靠谱的交友平台?
如何在Windows 2008云服务器安全搭建网站?
详解jQuery中基本的动画方法
免费制作海报的网站,哪位做平面的朋友告诉我用什么软件做海报比较好?ps还是cd还是ai这几个软件我都会些我是做网页的?
高端智能建站公司优选:品牌定制与SEO优化一站式服务
定制建站策划方案_专业建站与网站建设方案一站式指南
常州企业网站制作公司,全国继续教育网怎么登录?
如何在万网ECS上快速搭建专属网站?
免费ppt制作网站,有没有值得推荐的免费PPT网站?
在线制作视频的网站有哪些,电脑如何制作视频短片?
微网站制作教程,不会写代码,不会编程,怎么样建自己的网站?
宝塔建站教程:一键部署配置流程与SEO优化实战指南
建站之星安装后如何配置SEO及设计样式?
如何在万网自助建站平台快速创建网站?
javascript中对象的定义、使用以及对象和原型链操作小结
网站制作培训多少钱一个月,网站优化seo培训课程有哪些?
外贸公司网站制作哪家好,maersk船公司官网?
购物网站制作费用多少,开办网上购物网站,需要办理哪些手续?
香港代理服务器配置指南:高匿IP选择、跨境加速与SEO优化技巧
太原网站制作公司有哪些,网约车营运证查询官网?
贸易公司网站制作流程,出口贸易网站设计怎么做?
定制建站方案优化指南:企业官网开发与建站费用解析
建站之星后台密码如何安全设置与找回?
盘锦网站制作公司,盘锦大洼有多少5G网站?
学校为何禁止电信移动建设网站?
建站之星展会模版如何一键下载生成?
网站制作费用多少钱,一个网站的运营,需要哪些费用?
制作农业网站的软件,比较好的农业网站推荐一下?
如何通过.red域名打造高辨识度品牌网站?
*请认真填写需求信息,我们会在24小时内与您取得联系。