Android:避免通过存储在Application class =内存泄漏中来将活动传递给单例?

时间:2015-08-25 13:24:19

标签: java android

我有一些需要上下文信息的单身人士,因为他们可能需要显示对话框。到目前为止,我已经将相关的背景传递给了单身人士,但这越来越多地导致了内存泄漏。我想知道是否在应用程序类中存储对当前活动的引用可能是解决此问题的方法。由于每次新活动开始时变量都会被覆盖,因此不应该导致内存泄漏,但也可以从应用程序中的所有非活动类访问它。

在我的应用程序类中:

private static Activity currentForegroundActivity;

public static void setCurrentlyVisibleActivity(Activity activity) {
    currentForegroundActivity = activity;
}

public static Activity getCurrentlyVisibleActivity() {
    return currentForegroundActivity;
}

在每项活动中:

@Override
public void onResume() {
    super.onResume();

    App.setCurrentlyVisibleActivity(this);

在每个单身人士中:

methodThatRequiresUI(App.getCurrentlyVisibleActivity);

您可以预见这条路线是否有任何陷阱?我想应用程序类可能会被操作系统从内存中清除,但如果发生这种情况,应用程序本身会重新启动 - 它不会导致空指针。在调用set之前,get方法也可能在应用程序启动期间被调用 - 但是我可以编写检查来解决这个问题。

1 个答案:

答案 0 :(得分:2)

  1. 完全避免将活动上下文用于单个对象 那个。(是的,你知道吗)
  2. 不要从应用程序上下文中扩展视图和对话框。它会工作,但它 将排除样式和其他东西。
  3. 那怎么样?

    1. 使用静态方法创建实用程序方法,将上下文传递为 参数。

    2. 使用委托(传递匿名类,或者 接口)