Android 如何定义全局变量 以及 static静态变量使用误区 的问题

static 修饰的是 静态变量,它的优点是 使用很方便,在不同的类和包中都可以使用,在虚拟机中单独占用内存。

不过使用 static 有一些不太好的地方:项目中 使用 static 的很多地方会莫明的出现空指针异常的错误,经过排查,可能就是static的问题。

如此来说,static 静态修饰在Android的开发中是不是很危险?或许我们可以说如果是static User u = new User();这样定义的话,那么应该不会有太大问题,而如果是static User u;这样定义的话,那么很可以会出现NULL的现象。当然,前面的方法里面的属性也可能会出现空的情况,但是这个可以用封装来避免空指针。另外静态常量还是很好用的。

Application是与应用同时存在的,也就是应用在它就在,并不会被GC给莫名其妙的回收掉,因此,使用此方法更加安全。
那么应该如何保存登录或者全局的信息呢?根据Google官方的推荐以及百度到的各位大神的推荐,我们应该尽量使用继承自Application的自定义类,在我们继承的类中定义需要全局使用的变量,并通过getApplicationContext()来获取和保存相关的变量即可。


首先,定义一个类,继承Application:

package com.chitty.base;

import android.app.Application;

/**
 * 全局变量 保存 用户注册手机号
 */
public final class GlobalVaries extends Application {

    // 引发异常:在一些不规范的代码中经常看到Activity或者是Service当中定义许多静态成员属性。这样做可能会造成许多莫名其妙的null pointer异常。

    // 异常分析:Java虚拟机的垃圾回收机制会主动回收没有被引用的对象或属性。在内存不足时,虚拟机会主动回收处于后台的Activity或Service所
    // 占用的内存。当应用再次去调用静态属性或对象的时候,就会造成null pointer异常

    // 解决异常:Application在整个应用中,只要进程存在,Application的静态成员变量就不会被回收,不会造成null pointer异常

    private  String userphone;// 用户名手机号
    private String userId;// 用户ID

    @Override
    public void onCreate() {

        userphone = "";
        userId = "";
        super.onCreate();
    }

    public String getUserphone() {
        return userphone;
    }

    public void setUserphone(String userphone) {
        this.userphone = userphone;
    }

    public String getUserId() {
        return userId;
    }

    public void setUserId(String userId) {
        this.userId = userId;
    }
}


如何使用呢?接着看:


1、在设置数据的 页面 中:

 在 onCreate() 方法里写:

private GlobalVaries globalUsername = (GlobalVaries) getApplication();
globalUsername.setUsername(username);


2、在接收数据的 页面 中:

// 若是Activity中,mContext可写为 this,或者直接省略;
// 此处是在 自定义的 PopupWindow中,故使用Context对象 mContext;
private GlobalVaries globalUsername = (GlobalVaries) mContext.getApplication();
String username = globalUsername.getUsername();



http://www.2cto.com/kf/201205/133951.html


http://blog.csdn.net/weihan1314/article/details/8033052


  • 6
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值