簡體   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