我需要找到一个解决方案来保存和访问大量复杂的全局数据和方法。它必须可以从各种数据类的活动和普通实例变量中访问。
我就是这样做的。我想知道它是否有任何问题,或者是否有更好/更清洁的方式。
首先,我推荐多次推荐Application
......
public class MainDataManager extends Application{
public ... large chunks of data in arrays, lists, sets,....
//static variable for singleton access from within instance variables of other classes
public static MainDataManager mainDataManager;
//create and init the global data, and store it in the static variable of the class
@Override
public void onCreate() {
super.onCreate();
//in case it should get called more than once for any reason
if (mainDataManager == null) {
init();
mainDataManager = this;
}
}
现在从推荐的各种活动中访问它......
MainDataManager mainDataManager = (MainDataManager)getApplicationContext();
因为我需要从正常的数据类实例中访问它......
public class MyDataClass {
public MainDataManager mainDataManager;
public String name;
public MyDataClass(String namex) {
this.name = namex;
//this is why I defined the static variable within MainDataManager, so
//one has access to it from within the instance of MyDataClass
this.mainDataManager = MainDataManager.mainDataManager;
}
public void examplesForAccessing() {
//some examples on how to access the global data structure and associated methods
mainDataManager.someMethodAccess();
xyz = mainDataManager.someDataAccess;
mainDataManager.someIndirectMethodAccess.clear();
mainDataManager.someOtherData = false;
}
}
由于到目前为止我还没有这样做,我想知道这是否有任何问题。记忆力,效率......
非常感谢!
我可以加一点旁注吗?
我也可以使用类MainDataClass
并通过MainDataClass.var or MainDataClass.method().
访问是否有任何真正的劣势?
两种情况下的数据都保存在堆/堆栈中吗?
答案 0 :(得分:0)
您没有详细介绍“大块数据”,但请记住,onCreate方法是应用程序启动时运行的第一个并且在主/ UI线程上运行的方法。这意味着如果你在init()方法中执行长任务,那么你的用户体验将很差,更不用说你冒着ANR异常的风险。
解决方案很简单: