位置: 编程技术 - 正文

Android中全局变量问题(安卓全局替换)

编辑:rootadmin

推荐整理分享Android中全局变量问题(安卓全局替换),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:安卓全局变量怎么定义,androidstudio全局变量,安卓全局,安卓全局替换,安卓全局变量怎么定义,安卓全局变量怎么定义,android全局变量,android 全局dialog,内容如对您有帮助,希望把文章链接给更多的朋友!

Android中不管是使用public static 定义全局变量,还是使用Application类进行全局变量的定义,都不能算作是实际意义上的全局变量,他们都会因为Activity被系统释放而造成传&#;失败。

最近在做一个简单的APP应用,其中专门写一个http访问的线程类,所有的http访问都会调用此类进行访问,每次http访问都会要发送用户名和密码,所以最初的考虑是将用户名和密码定义为pubic static存放到一个公共类中,但是偶尔会出现获取用户名密码为空的情况,一旦为空,就一直为空。

Android中全局变量问题(安卓全局替换)

后来看到有人说使用Application类进行存储,但是问题仍然存在。

原因就是因为Activity可能会因为一些原因被Kill掉,全局变量也会被释放掉。

以下参考网友的博客:

Android开发中一般都是使用Intent给Activity传参。有时需要传复杂对象时,我们会倾向于用全局变量(静态变量或Application属性)。但其实这样做是有隐患的,跟Activity的生命周期有关,正好最近遇到这个问题,在这里写一下。

大概情况是这样的:ActivityA中点击按钮启动ActivityB,同时要传一个大数据对象,懒得对这个对象进行序列化,于是就直接搞了个全局变量ActivityB.param写了进去,在ActivityB.onCreate里读取并显示信息,编译运行一切正常。这样过了大半个月&#;乎也没发现什么问题。直到有一天发给客户使用后,在友盟后台看到了空指针错误,仔细分析堆栈代码,错误就在ActivityB.onCreate里读取全局变量时发生,也就是全局变量返回了空! 全局变量为空一般就是由于内存不足进程被KILL过重新创建了。按常理分析,ActivityA在给ActivityB.param赋&#;后会立即启动ActivityB,这过程很短,进程不可能这么快被KILL,因此理论上ActivityB.onCreate中应该能读取到ActivityB.param的。 实际上,在ActivityA给ActivityB.param赋&#;启动ActivityB后,ActivityB.onCreate确实是能读取到ActivityB.param的;但是,ActivityB并不能保证永远在前台,一旦ActivityB所在任务被切到后台(如有电话打进来了),系统就可以在内存不足时将ActivityB所在的进程KILL掉;而当ActivityB所在任务被切回前台(如电话打完了),这时系统会自动重新恢复ActivityB,这时全局变量自然就没了。 有人说我不用静态变量,用Application的属性来存全局参数,是不是就可以避免这个问题了呢?其实也是不行的,因为进程被KILL再恢复后,Application对象也是销毁重建了的;安卓系统并不保证会在KILL进程前给程序发通知,因此我们也无法在Application里保存恢复全局变量。 另外,全局变量也不能记录安卓的界面Context相关的类(如Activity、View),因为安卓系统自动管理这些类,记录它们会导致引用计数增加无法释放的内存泄露问题;如果一定要记录,则应该使用弱引用WeakReference。 总之安卓开发中是不推荐用全局变量传参的。最好的办法还是按照安卓的开发规范,完全使用Intent进行传参,因为系统在KILL进程前会自动保存Activity堆栈,同时保存相关的Intent参数,并自动进行恢复。如果非要用全局变量,则至少必须在读取全局变量处理时判断是否为空,避免程序出错崩溃;同时最好在onPause时自行保存数据以便被KILL后恢复。 但是我觉得全局变量也不是一无是处完全不能用,主要是要理解并避开安卓进程生命周期中全局变量的变化。例如用全局变量来记录自己写的全局处理类(如工厂类、类注册器等),只要注意在被进程KILL后做好恢复工作,是完全可以的。

Fragment嵌套时注意点 finalpublicFragmentManagergetChildFragmentManager()ReturnaprivateFragmentManagerforplacingandmanagingFragmentsinsideofthisFragment.Youareattemptingtousefragmentsnestedwithinotherfragments,bywayofyourF

Android属性动画完全解析(上),初识属性动画的基本用法 转载请注明出处:

开源项目源码解析-xUtils 源码解析 xUtils源码解析本文为Android开源项目源码解析中xUtils部分。项目地址:xUtils,分析的版本:c2ac,Demo地址:xUtilsDemo分析者:Caij,校对者:maogy,校对

标签: 安卓全局替换

本文链接地址:https://www.jiuchutong.com/biancheng/383252.html 转载请保留说明!

上一篇:Android4.0以上强制显示menu菜单按钮(手机android版本强制升级)

下一篇:【oracle服务】(oracle的服务主要有)

  • 汇票签收后可以撤回吗
  • 职工薪酬分配表及分录怎么做
  • 收到财政局拨款填到现金流量表哪一项
  • 公司一般户需要年检吗
  • 理财产品产生的利息怎么入账
  • 如何审计主营业务的真实性
  • 政府补贴营业外收入所得税汇算清缴需要调增吗
  • 新个税年终奖怎么申报
  • 小规模购买金税盘
  • 股权转让资产怎么清算
  • 农产品加计扣除政策2023最新
  • 二手房分析总结范文
  • 长期待摊费忘记摊了怎么办
  • 罕见病药品进口要求
  • 收到电子银行承兑汇票怎么做账务处理
  • win10专业版如何改为家庭版
  • 上月发票未上传
  • pvlsvr.exe - pvlsvr是什么进程 有什么用
  • 重装系统后怎么恢复原来的系统
  • 营改增后哪些费用可以抵扣
  • 蜻蜓翅膀特写怎么画
  • 企业的组织形式共5种
  • 阿德莱德 景点
  • 银行贷款用途能改吗
  • 权重值的确定可以依据什么
  • laravel 自定义类
  • 购买方收到的违约金计入
  • css实现轮播图侧边阴影效果
  • php foreach as
  • 分页的实现
  • 资本公积属于谁
  • 基于Java+SpringBoot+Vue+uniapp微信小程序零食商城系统设计和实现
  • php读取excel文件
  • 头歌实践教学平台官网
  • vuev-for循环k值的意义
  • 小程序开发要钱吗
  • 材料合理损耗会计处理
  • 以前年度损益调整是什么意思
  • 小微企业所得税优惠政策最新2022
  • 委托加工物资如何做账
  • 税控盘费和服务费都可以减免吗
  • vue this.$el
  • java事件处理机制三个重要概念
  • 投资性房地产递延所得税负债为什么计入其他综合收益
  • 外购商品发放给员工 进项税额能不能抵扣
  • 甲供材的卸料由谁负责
  • 金税四期上线企业还活吗
  • 材料暂估入库的附件需要哪些资料
  • 公司支票可以转给个人吗
  • 原材料用于在建工程进项税
  • 餐饮业可以开具免税发票吗
  • 收入纳税明细里的收入和实际不符
  • 保洁阿姨工资怎么扣税
  • sql server存储过程写法
  • Excel导入Sqlserver数据库脚本
  • 方正电脑升级
  • ntldr.exe - ntldr
  • linux命令行怎么查看公网ip
  • linux中tailf命令
  • gnaupdaemon.exe是什么
  • symsrv.dll 病毒专杀
  • 惠普装xp系统
  • xp系统优化软件哪个好
  • win7怎么删除操作中心
  • win10系统锁屏广告怎么取消
  • 新浪微博随时随地
  • 深入理解中国式现代化论文
  • 初识年岁尚温柔 小说 免费
  • vue实现标签页效果
  • 简洁实用的公司治理机制
  • python连接Oracle数据库
  • javascript学习指南
  • python如何切行
  • 江苏税务电子税务局电话号码
  • 武汉市契税减免政策
  • 甲供材备案需要的资料
  • 银行扣账户维护费会计分录
  • 新三步走和旧三步走的异同点
  • 土地增值税采取什么税率
  • 电子税务局怎么找回用户名
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设