Android开发调试-static静态变量与如何定义全局变量的问题
来源:互联网 发布:js冒泡排序算法 编辑:程序博客网 时间:2024/05/18 12:41
static修饰的静态变量,使用很方便,在不同的类和包中都可以使用,在虚拟机中单独占用内存,没错,这些都是它们的优点,不过在项目上线后,才发现static有一些不太好的地方。
在查看项目的崩溃信息时,发现很多地方莫明的出现空指针异常的错误,经过排查,发现可能就是static的问题。我们在项目中,将用户的信息也就是User对象保存成了一个静态变量,而在报错的地方,也都发现有使用过这种变量,因此,可以大致推断出与这种保存的方式有一定的联系。同时,有不少用户反映在打开应用的情况下,接个电话或者长时间待机后,再回到应用也会出现崩溃的现象,而这些崩溃都与静态变量的空指针有关系。
如此来说的话,static静态修饰在Android的开发中是不是很危险?或许我们可以说如果是static User u = new User();这样定义的话,那么应该不会有太大问题,而如果是static User u;这样定义的话,那么很可以会出现NULL的现象。当然,前面的方法里面的属性也可能会现空的情况,但是这个可以用封装来避免空指针。另外静态常量还是很好用的。
那么应该如何保存登录或者全局的信息呢?根据Google官方的推荐以及百度到的各位大神的推荐,我们应该尽量使用继承自Application的自定义类,在我们继承的类中定义需要全局使用的变量,并通过getApplicationContext()来获取和保存相关的变量即可。
比如:
[java]
public class TestApplication extends Application {
private int curIndex;
public int getCurIndex() {
return curIndex;
}
public void setCurIndex(int curIndex) {
this.curIndex = curIndex;
}
@Override
public void onCreate() {
super.onCreate();
}
@Override
public void onTerminate() {
super.onTerminate();
}
}
而在Activity中灵活使用即可
[java]
TestApplication application = (TestApplication) this.getApplicationContext();
//保存变量
application.setCurIndex(5);
//获取变量
application.getCurIndex();
Application是与应用同时存在的,也就是应用在它就在,并不会被GC给莫名其妙的回收掉,因此,使用此方法更加安全的稳妥,另外在Application中还可以干很多事,这个我们以后再说。
- Android开发调试-static静态变量与如何定义全局变量的问题
- Android开发调试-static静态变量与如何定义全局变量的问题
- Android 如何定义全局变量 以及 static静态变量使用误区 的问题
- Android开发中使用Static静态变量带来的问题
- c中static静态变量与全局变量的区别
- 静态变量 static 全局变量
- 静态变量 static 的定义
- 类变量、成员变量、实例变量、局部变量、静态变量、全局变量的定义与区别
- Android使用static定义全局变量被系统回收的问题
- C/C++中的static静态变量和全局变量以及定义屏蔽的一个示例
- IOS 成员变量,全局变量,局部变量定义,static与extern的区别
- IOS 成员变量,全局变量,局部变量定义,static与extern的区别
- IOS 成员变量,全局变量,局部变量定义,static与extern的区别
- IOS 成员变量,全局变量,局部变量定义,static与extern的区别
- 用static定义静态全局变量
- 静态变量 static 全局变量 global
- 全局变量,静态变量,extern,static
- static定义静态变量
- 简单对比微软WorkFlow3.5与4.0的差异
- 说话之道七
- 解压和生成ramdisk-root.img工具脚本
- 苹果开发者帐号(Company)申请流程
- T_sql之创建数据库
- Android开发调试-static静态变量与如何定义全局变量的问题
- oarcle之with as 构建临时表查询
- 10-19带表情的聊天室
- HSRP协议原理及配置实例
- 升级iOS6系统必备 苹果开发者帐号申请教程
- x86和arm架构原子操作的区别
- Toast自定义和一个textview中显示不同颜色
- JS验证表达函数,可不需要依赖form
- IPhone/IPad的一些使用小技巧