【发布时间】:2020-04-08 04:07:18
【问题描述】:
我正在创建一个模块(一组执行功能的类),我需要上下文对象来执行一些操作,例如安全设置读取等。
我不喜欢为我的类创建多个对象,这在我的情况下是不需要的,即使我正在做这样的事情,
class MyModuleFactory {
private static final String TAG = MyModuleFactory.class.getSimpleName();
public Context mContext;
private static HashMap<Context, MyModuleFactory> myInstance = new HashMap<>();
private MyModuleFactory(Context context) {
mContext = context;
}
public static synchronized MyModuleFactory getInstance(Context mContext) {
if(mContext == null) {
Log.i(TAG, "Context cannot be null");
return null;
}
if(myInstance.get(mContext.getApplicationContext()) != null) {
return myInstance.get(mContext.getApplicationContext());
} else {
MyModuleFactory myModuleFactory = new MyModuleFactory(mContext);
myInstance.put(mContext.getApplicationContext(), myModuleFactory);
}
}
}
我担心的是,因为我在这里持有应用程序的上下文,我担心我会导致内存泄漏 - 原因是因为 Android 可以随时清除应用程序对象并重新创建它。因此,在应用程序的生命周期后面保留上下文并且不允许在此处清除上下文可能会导致内存泄漏。
在此处为我的模块强制单例并避免内存泄漏的更好方法是什么。
【问题讨论】:
标签: android memory-leaks singleton android-context