繁体   English   中英

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

[英]Android: avoiding passing activity to singletons by storing inside the Application class = memory leak?

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

在我的应用程序类中:

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. 完全避免对单个对象使用活动上下文。(是的,您知道这一点)
  2. 不要从应用程序上下文中填充视图和对话框。 它可以工作,但不包括样式和其他内容。

那怎么办

  1. 使实用程序方法与静态方法一起使用,并将上下文作为参数传递。

  2. 使用委托(通过匿名类或接口)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM