谨慎在页面生命周期里使用全局静态变量
来源:互联网 发布:win10软件安装不了 编辑:程序博客网 时间:2024/06/06 10:43
项目开发中,个人贪图简便,在Activity的生命周期里使用了一个全局的布尔静态变量,而正是因为这个举动,差点导致版本转测block,在此记录以警醒自己(项目细节不谈)
原因探析
Intent bindIntent = new Intent(context, BindActivity.class); bindIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); bindIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); bindIntent.putExtra(AUTO_BIND, bean.isbAutoBind()); context.startActivity(bindIntent);
项目中使用了上述代码去启动一个BindActivity。当服务端发来一个Bind消息时(自定义的TCP消息),这段代码就会被程序执行。而Bind消息发送的次数取决于用户的操作行为,也就是说,这个Bind消息是可以发送多次的。
当第一次BindActivity已经呈现出来以后,此时内存驻留了其实例对象ActivityA,之后又收到一个Bind消息,由于使用了FLAG_ACTIVITY_NEW_TASK和FLAG_ACTIVITY_CLEAR_TOP的启动模式,此时在内存中又会创建出一个BindActivity实例ActivityB。
当ActivityB要覆盖ActivityA时,我们知道,这两个Activity会各自执行自己的生命周期流程,如下:
ActivityA-onPause()->ActivityB-onCreate()->ActivityB-onStart()->ActivityB-onResume()->ActivityA-onStop()->ActivityA-onDestroy()
悲催的是,在BindActivity的onCreate和onDestroy方法里面,执行了如下代码
public static boolean sIsRegistered = false;protected void onCreate(Bundle savedInstanceState) { ... sIsRegistered=true; ...}protected void onDestroy() { ... sIsRegistered=false; ...}
我们知道,静态变量在全局只有一份实例,且只初始化一次,其生命周期与程序的生命周期一致,这样就导致在ActivityB->onCreate方法里面该静态变量被设置成true后,又马上被ActivityA->onDestroy()方法设置成了false。这并不是期望得到的结果,也就导致了一些重要的问题(细节这里不透露)。
因此,写下这篇文章,用来警醒自己,日后不要再犯同样错误,同时,也想将个人的教训分享给广大读者,希望你们也可以有所收获。
阅读全文
0 0
- 谨慎在页面生命周期里使用全局静态变量
- c++中全局变量,全局静态变量,局部静态变量,局部变量的作用域和生命周期
- [Unity&对象]怎么使用全局静态变量
- 在c++,c中宏的使用和全局静态变量的使用
- 在企业级应用开发中,使用全局jsp变量为所有jsp页面配置信息
- springMVC 谨慎使用成员变量
- 使用类创建全局变量(全局静态变量供使用)
- 静态变量生命周期
- 静态变量生命周期
- java 静态变量生命周期
- static 静态变量生命周期
- static静态变量生命周期
- Java 静态变量生命周期
- 全局静态变量及局部静态变量
- 局部静态变量和全局静态变量
- Android 使用全局的静态变量,引发一系列诡异错误
- 全局/静态变量初始化为0出错? 全局/静态变量初始化为0放在bss段还是data段?
- 全局变量与全局静态变量
- springmvc mybatis shiro ios android构建cms系统
- SELECT 实现placeholder
- Python的伪私有属性
- ONVIF协议网络摄像机(IPC)客户端程序开发(10):设备校时
- 第十周项目一
- 谨慎在页面生命周期里使用全局静态变量
- 微信notify
- Makefie -- 隐含条件
- 第十三周项目3-是否二叉排序树?
- 精通脚本黑客-2.1-学习笔记
- 扩展欧拉定理的证明 欧拉定理的推广
- [LeetCode-Algorithms-40] "Combination Sum II" (2017.11.29-WEEK13)
- js 网站增加统计代码
- linux积累(一)---查看压缩文件的最后一行