我想在启动Android应用时从资源和资源加载大型数组,并在多个使用的活动中访问这些对象。
现在我正在我的启动活动中加载资源:
StartActivity.java:
Object heavyObject;
onCreate() {
new AsyncTask<Void, Void, Exception>() {
@Override
protected Exception doInBackground(Void... params) {
try {
Assets assets = new Assets(context);
File assetDir = assets.syncAssets();
heavyObject = heavySetup(assetDir);
} catch (IOException e) {
return e;
}
return null;
}
}.execute();
...
public void goToNextActivity() {
Intent intent = new Intent(base_activity, NextActivity.class);
Bundle b = new Bundle();
b.putObject("ho", heavyObject);
intent.putExtras(b);
startActivity(intent);
finish();
}
但是这会多次复制对象并导致内存问题。如何在应用程序的生命周期内在我的活动中共享对象,并且只加载和存储一次?
答案 0 :(得分:0)
将数据放入static
字段。这是故意的内存泄漏,所以要小心:
不要继续倾注更多数据
如果您到达不再需要它的位置,null
出现该字段以允许Android垃圾收集该数据
另请注意,只有您的流程可以使用此数据。如果Android破坏并重新创建您的流程,您需要从资源/资产/其他任何地方再次延迟加载此数据。
根据数据的性质,您可能会考虑生成一些包含数据的Java的代码,即生成R
和BuildConfig
的方式。然后,您确保在需要时数据始终存在。
答案 1 :(得分:0)
Application
实例。结帐How to