消灭全局变量

问题发现:APP莫名其妙的崩溃,并且使用一些全局变量。

解决方案:我们仍然使用全局变量,每次修改全局变量值时,都要把值序列化到本地文件,及时内存中的全局变量被收回,本地还保存有最新的值。

public class User implements Serializable, Cloneable {
/**
* @Fields: serialVersionUID
*/
private static final long serialVersionUID = 1L;


private static User instance;


private User() {


}


public static User getInstance() {
if (instance == null) {
Object object = Utils.restoreObject(AppConstants.CACHEDIR + TAG);
if (object == null) {
object = new User();
Utils.saveObject(AppConstants.CACHEDIR + TAG, object);
}
instance = (User) object;
}


return instance;
}


public final static String TAG = "User";


private String loginName;
private String userName;
private String userId;
private String ltdNumber;
private int score;
private boolean loginStatus;

public void reset() {
loginName = null;
userName = null;
userId = null;
ltdNumber = null;
score = 0;
loginStatus = false;
}

public void save() {
Utils.saveObject(AppConstants.CACHEDIR + TAG, this);
}



public String getUserId() {
return userId;
}


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


public String getLtdNumber() {
return ltdNumber;
}


public void setLtdNumber(String ltdNumber) {
this.ltdNumber = ltdNumber;
}


public String getLoginName() {
return loginName;
}
public void setLoginName(String loginName) {
this.loginName = loginName;
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public int getScore() {
return score;
}
public void setScore(int score) {
this.score = score;
}
public boolean isLogin() {
return loginStatus;
}
public void setLoginStatus(boolean loginStatus) {
this.loginStatus = loginStatus;
}

public User readResolve() throws ObjectStreamException, CloneNotSupportedException {
instance = (User) this.clone();
return instance;
}


private void readObject(ObjectInputStream ois) throws IOException, ClassNotFoundException {
ois.defaultReadObject();
}


public Object Clone() throws CloneNotSupportedException {
return super.clone();
}
}


//

序列化 和反序列化

public static final void saveObject(String path, Object saveObject) {
FileOutputStream fos = null;
ObjectOutputStream oos = null;
File f = new File(path);
try {
fos = new FileOutputStream(f);
oos = new ObjectOutputStream(fos);
oos.writeObject(saveObject);
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
if (oos != null) {
oos.close();
}
if (fos != null) {
fos.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}


public static final Object restoreObject(String path) {
FileInputStream fis = null;
ObjectInputStream ois = null;
Object object = null;
File f = new File(path);
if (!f.exists()) {
return null;
}
try {
fis = new FileInputStream(f);
ois = new ObjectInputStream(fis);
object = ois.readObject();
return object;


} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
} finally {
try {
if (ois != null) {
ois.close();
}
if (fis != null) {
fis.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
return object;
}


参考:《APP研发录》

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值