我有一些需要上下文信息的单例,因为它们可能必须显示对话框。到目前为止,我已经将相关上下文传递给了单例,但这越来越多地导致内存泄漏。我想知道在应用程序类中存储对当前 Activity 的引用是否可以解决这个问题。由于每次新 Activity 启动时都会覆盖该变量,因此不会导致内存泄漏,但也可以从应用程序中的所有非 Activity 类访问该变量。
在我的应用程序类中:
private static Activity currentForegroundActivity;
public static void setCurrentlyVisibleActivity(Activity activity) {
currentForegroundActivity = activity;
}
public static Activity getCurrentlyVisibleActivity() {
return currentForegroundActivity;
}
在每个 Activity 中:
@Override
public void onResume() {
super.onResume();
App.setCurrentlyVisibleActivity(this);
在每个单例中:
methodThatRequiresUI(App.getCurrentlyVisibleActivity);
您可以预见这条路线上是否存在任何陷阱?我想应用程序类可能会被操作系统从内存中清除,但如果发生这种情况,应用程序本身将重新启动 - 它不会导致空指针。 get 方法也可能在应用程序启动期间在调用该集合之前被调用 - 但我可以编写检查来解决这个问题。
最佳答案
- 完全避免使用 Activity 上下文到单例对象 那个。(是的,你知道这一点)
- 不要从应用程序上下文中夸大 View 、对话框。它会起作用,但是它 将排除样式和其他内容。
那怎么办?
使用静态方法创建实用方法,将上下文传递为 范围。
使用委托(delegate)(传递匿名类,或 接口(interface))
关于java - Android:通过存储在应用程序类中避免将 Activity 传递给单例=内存泄漏?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32205247/