在我的应用程序中,我必须在活动中共享各种java-beans类。
为了做到这一点,我扩展了Application类,在其中我创建了一个填充了所有java-beans的HashMap。每个java-beans都有自己的Key。
示例代码:
C8
这在所有活动中都可以使用,这没关系。但是,我有两个问题:
1)我需要在非活动类中使用myObjets,比如utils类,但是在这些类中我不能做" getApplicationContext()"因为他们没有扩展活动。
例如,在我的主要活动中,我启动了一个服务(但它在普通的类中),并且该服务调用的查询又是另一个正常的类。
查询需要myObjects中的对象!
我认为我不能将myObjects设为公共静态。
2)在MyApplication中,我必须提前创建所有的java-bean。
如果将来我想创建一个新的教室对象,除了已经存在的教室对象,该怎么办? 我应该为它创建一个新密钥,但这是不可能的!
感谢您的帮助。
UDPATE
我改变了问题:
在这堂课中:
public class MyApplication extends Application {
public static final String CLASSROOM_KEY = "Classroom";
private HashMap<String, Object> myObjects;
@Override
public void onCreate() {
myObjects = new HashMap<String, Object>();
myObjects.put(CLASSROOM_KEY, new Classroom());
}
public HashMap<String, Object> getMyObjects() {
return myObjects;
}
}
我想避免将教室传递给这种方法(从另一个普通班级调用)。如何从这个类访问全局对象?
答案 0 :(得分:0)
我认为我无法使myObjects成为公共静态。
为什么不呢? myObjects
已经实际上具有全球性。从内存管理的角度来看,让myObjects
成为private
的{{1}}数据成员,没有任何好处。如果您希望Application
成为Java singleton,请执行此操作。您只需要观察内存管理,就像使用当前的实现一样。
在MyApplication中,我必须提前创建所有的java-beans
不,你没有。
如果将来我想创建一个新的教室对象,除了已经存在的教室对象,该怎么办?
然后创建另一个。也许正确的单例是Classroom
,它保存在School
个对象的集合上。同样,您的主要近期问题是内存管理问题,因此您不会耗尽内存,因为您一直试图保留这些对象。
答案 1 :(得分:0)
1)我需要在非活动类中使用myObjets,比如utils类,但是在这些类中我不能做&#34; getApplicationContext()&#34;因为他们没有扩展活动。
我认为最好的方法是将MyApplication类创建为单例。在那里,您可以通过调用getInstance和属性的相应getter / setter从任何地方检索数据。
简短的例子:
public class MyApplication extends Application {
private static MyApplication mInstance;
public MyApplication getInstance(){
// this means you have only one existing instance of this class.
if(mInstance == null){
// set the context to this MyApplication instance
mInstance = this;
}
// return the instance of this class
return mInstance;
}
// here your stuff for MyApplication
public HashMap<String, Object> getMyObjects() {
return myObjects;
}
}
然后你可以从另一个类中调用它:
public class CFoo{
public CFoo(){
//retrieve myObjects from MyApplication
MyApplication.getInstance().getMyObjects();
}
}