单例模式,或者自定义Application将该对象保存在Application类中,设置公共方法获取。
我之前自己想了一下,初步写成了下面这样(没写完,基本格式是这样的),我手头没有成熟的案例,我在想这样有没有什么不妥?
public class AppDevice extends Application {
public String name;
public int color;
public int id;
public int type;
public boolean status;
public int lostTime;
public String locatoin;
}
还有如果是单例模式的话是不是说直接定义一个java类就行了,然后设计成单例,这样是否能够实现共享心里没底,我以前也没有写过大一点的java工程,所以希望大神能解释详细点。
@菜鸟的梦醒: Application类是android系统类,你每个应用程序启动时都会初始化一个Application对象,是全局调用的,在activity内使用getApplication()就能获取到.你可以自定一个Application类,这样
public class UILApplication extends Application{ private User user; public User getUser() { return user; } public void setUser(User user) { this.user = user; } }
在配置文件AndroidManifest.xml中,给applicaton节点设置name为这个UILApplication
<application
android:name="com.test.test.UILApplication"
在Activity内这样调用
UILApplication application=(UILApplication)getApplication();
User user=application.getUser();
@林J: 单例模式的话,静态对象有可能会被系统回收掉,推荐用Application保存。
@林J: 看您的意思是说先自己定义一个user类,然后把这个user类作为application的一个成员,我现在还有一个类Device,这个也需要全局共享,那我在application中这样写private Device device; 实现get和set方法,也就是说有多少个全局共享的类,只需要在application中添加多少成员就行了,是吗?
@菜鸟的梦醒: 是的
@林J: 还是说一下吧,以上两种全局共享都不可靠,在系统因为内存不足回收掉应用时,你保存的数据都会消失。比如说你应用放在后台很久再打开,getUser就会返回null,因为这段时间内Application可能已经被回收过再重新创建了。如果你的user类只是作为当前登录用户来使用的话,可以考虑存入sharepreference内,这个方法简单,但是不适用你需要管理一堆user的情况。或者在ActivityA跳转到ActivityB(假设在B界面修改user数据)时作为intent的bundle参数放入,这样在activityB恢复时会读取bundle参数重新赋值。之后ActivityB修改结束后,在ActivityA通过onActivityResult重置A的值。这种情况User必须继承Serializable或者Parcel接口。