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中还可以干很多事,这个我们以后再说。
相关推荐
- **static**目录:存放应用的静态资源,如图片、字体等,这些资源会被直接复制到打包后的应用目录下。 - **pages**目录:包含了应用的所有页面,每个子目录代表一个独立的页面,目录名即页面路由。 5. **配置...
- 全局变量前缀:实例成员变量前缀`m`(代表`member`),类静态变量前缀`s`(代表`static`)。例如,`mRun`(实例变量),`sInstance`(类静态变量)。 - 控件变量前缀:添加组件前缀,顺序位于所有者前缀之后。...
在Android开发过程中,日志(Log)是一种非常重要的调试和问题排查工具。它允许开发者记录应用程序运行时的各种信息,如错误、警告、调试信息等。然而,在生产环境中,过多的日志输出可能会对性能造成影响,因此,...
- `uni.scss`或`uni.css`是全局样式文件,定义了项目的基础样式和变量。 - `main.js`是项目的入口文件,初始化Vue实例和uni-app的配置。 3. **uni-app组件和API使用** - 通过uni-app的组件库,可以创建常见的UI...
在Android开发中,JNI(Java Native Interface)是一个关键的组件,允许Java代码调用本地(非Java)代码,如C++或C。Android.mk文件是Android NDK(Native Development Kit)的一部分,用于编译和链接C/C++源码,...
- **静态和全局变量**:尽管在某些情况下静态和全局变量是必要的,但过度使用会导致难以调试的错误。因此,建议尽量减少对它们的使用。 #### 类的设计 - **构造函数的职责**:构造函数应负责初始化对象的状态,...
- **静态变量**:如`static int count;`。 - **静态方法**:如`public static void incrementCount() { count++; }`。 ##### 3.7 内存 Java程序运行时涉及堆内存和栈内存。 - **堆内存**:存储对象实例。 - **栈...
【标题】"HBuilderProjects.7z"是一个包含HBuilder项目的压缩文件,它使用了7-Zip这种流行的压缩格式来整合一系列与开发uni-app相关的文件和资源。uni-app是一个跨平台的前端框架,允许开发者使用Vue.js语法编写一次...
- **static**:静态资源目录,如图片等。 - **components**:自定义组件存放目录。 #### 九、开发规范 - **页面文件**:遵循Vue单文件组件(SFC)规范。 - **组件标签**:接近小程序规范,但使用**uni**作为前缀。 -...
6. **App.vue**:这是uni-app的小程序应用组件,包含了整个小程序的根组件,可以在这里定义全局的配置和生命周期方法。 7. **static、common、store**:这些是项目中的目录: - `static` 通常存放静态资源,如图片...
6. **脚本文件**:如`main.js`,作为项目的入口文件,配置全局变量和引用其他模块。 7. **路由配置**:`router.js`或`router`目录,定义应用的路由规则,控制页面间的跳转。 8. **uni-app的API调用**:应用中可能会...
静态/全局区则存放全局变量和静态变量,它们在整个程序执行期间都存在。 内存分配主要有三种方式: 1. 静态分配:通过`static`关键字或全局变量声明进行分配,这些变量在程序开始时被初始化,并在程序结束时销毁。 ...
2. **static**:存放静态资源,如图片、字体文件等。 3. **unpackage**:uniapp编译后生成的资源文件,用于微信开发者工具进行预览和发布。 4. **utils**:包含各种通用函数和帮助类。 5. **App.vue**:小程序的全局...
7. **uni.scss**:uniApp的基础样式文件,定义了一些全局样式和变量。 8. **app.vue**:应用的主组件,定义了应用的整体布局和生命周期钩子函数。 9. **pages.json**:页面配置文件,定义了应用的路由规则和页面...
- 【uni.scss】是样式文件,使用SCSS预处理器语法,可以定义全局样式变量和函数,提高代码复用性。 - 【static】目录用于存放静态资源,如图片、字体等。 - 【App.vue】是应用的主组件,包含整个应用的根元素和一些...
1. `app.js`:小程序的主要逻辑文件,定义全局变量和函数。 2. `app.json`:配置文件,定义小程序的页面、窗口样式、网络请求域名等。 3. `pages/`:存放各个页面的文件夹,每个页面有自己的JS、WXML(微信小程序...
在Android开发中,JNI(Java Native Interface)是一个关键的技术,它允许Java代码和其他语言写的代码进行交互。本项目"CppJNITest"是关于如何使用JNI调用C++自定义类的一个实例,旨在帮助开发者深入理解这个过程。...
2. `static`目录:用于存放静态资源,如图片、字体等,这些文件不会被编译,会原封不动地复制到各端的资源目录。 3. `uni_modules`目录:存放可复用的模块,可以是自定义组件或者插件,方便在多个页面间共享。 4. ...
1. `main.js`:项目的主入口文件,用于配置全局变量和初始化应用。 2. `pages/`:存放各个页面的文件夹,每个子文件夹代表一个页面,包含`.vue`文件,这是uniapp的组件文件,包含HTML、CSS和JavaScript。 3. `...
6. **uni.scss/uni.css**:uniapp的全局样式文件,定义了一些基础样式和变量,可以在此设置项目的整体风格。 7. **main.js**:项目的入口文件,初始化Vue实例,注册全局组件,配置路由等。 8. **manifest.json**:...