android - 保存在Application子类中的全局变量什么情况下会丢失?
ringa_lee
ringa_lee 2017-04-17 14:58:25
[Android讨论组]

把从服务器接受的User类放到Application下,在某个Activity中就get不到了,是不是User信息不适合放在Application下?应该怎么存?

Update 追加对问题的描述

定义了一个public class App extends Application,在配置文件中设置好的初始化,里面放了一个UserBean的getter和setter方法,在‘A’-Activity中,用App.getUser().getxx没问题,跳转到'B'-Activity中,App.getUser()就出现了空指针。

ringa_lee
ringa_lee

ringa_lee

全部回复(3)
怪我咯

Android对Applicaton类做了如下描述:

Base class for those who need to maintain global application state.

也就是说,我们可以继承该类以保存全局的“application state”。因为这些变量是全局的,所以应用的所有组件都可以获取/更改这些变量。链接

所以理论上,保存的全局变量在整个App的生命周期内是不会丢掉的,除非被程序主动改掉。
建议在整个工程中检查都是谁在引用Application子类中存储的这个全局变量,除了A-Activity和B-Activity之外? 或者你继承的Application类中,有没有在后来改到它?

如果还未解决,尝试使用单例模式,代替继承Application类以保存你的全局变量。

There is normally no need to subclass Application. In most situation, static singletons can provide the same functionality in a more modular way.

阿神

1,用接口定义全局变量

public interface UserInfo {
    
    String USER_NAME = "admin";
    String USER_PWD = "admin";
    }

引用 UserInfo.USER_NAME

2,用公开静态变量

public class UserInfo{
    public static String USER_NAME = "admin"; 
    public static String USER_PWD = "admin"; 
    }

引用 UserInfo.USER_NAME

3, 用Getter/Setter

public class UserBean {
    private static String UserName;
    private static String UserPwd;

    public static String getUserName() {
        return UserName;
    }

    public static void setUserName(String userName) {
        UserName = userName;
    }

    public static String getUserPwd() {
        return UserPwd;
    }

    public static void setUserPwd(String userPwd) {
        UserPwd = userPwd;
    }
}

使用 UserBean.setUserName / UserBean.getUserName

黄舟

这个早就说过,不要在Application中放置全局对象. 当你把程序放置到后台,或者机器内存不够的时候,这些全局变量会被回收. 在Android中全局变量都要放置到数据库中或者Preferences中

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号