Application中保存变量

在项目中由于历史原因将一些用户信息保存在了Application中,在切换用户时候就做置空等操作。

但是在新版本测试的过程中发现了问题。

首先,网上有很多文章会告诉你不要在Application中保存数据,因为Application会被回收,数据就相当于会被重置。

其次,在多进程访问应用时也会出现问题,我的问题就出现在app开启了一个service(从而开启了一个子进程),当主进程Application的变量更新时,service进程中的变量并没有更新。

例如:

class User{
        int userId;
        String userName;

        public int getUserId() {
            return userId;
        }

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

        public String getUserName() {
            return userName;
        }

        public void setUserName(String userName) {
            this.userName = userName;
        }
    }

Application中有一个 static User user;如果在主进程中setUserName("A"),在Service中获取的userName仍然不是A,因为子进程持有的user并没有修改,在创建子进程的同时,Application中的变量也被复制了一份,而在此之后你只修改了主进程中的userName,service中的Application自然获取不到改变的变量了。有人说,我的service的onDestory已经回调了啊,为什么新创建的service还是没有copy更改过的userName,这时候你需要使用Process.myPid()来查看当前进程的id了,我的亲身经历是:新的service也建立在了上一个被销毁的service所在的子进程中。所以要区分好service和进程的概念呀。

Application中的变量不是跨进程的,但是Android设计了一个叫Intent的东西,这个东西你一定不陌生,这个是为数不多的可以携带数据穿梭于进程间的类,正常情况下,子进程中的数据的来源就应该是Intent,以免出错啦。

你可能感兴趣的:(Application中保存变量)