我知道爲什麼使用靜態處理程序是一個好主意(避免處理程序正在處理時發生內存泄漏)。然而,我讀過的大部分內容似乎暗示它是爲了防止應用程序/上下文泄漏。所有示例代碼都有一個Activity或Service作爲外部類。例如,這個經常鏈接的帖子談到泄漏的上下文和視圖(http://www.androiddesignpatterns.com/2013/01/inner-class-handler-memory-leak.html)。它以「底線是什麼」結尾?如果內部類的實例超出了活動的生命週期,那麼避免在活動中使用非靜態的內部類,而應該選擇靜態的內部類,並且對內部的活動持有一個弱引用。可以在非活動類中使用非靜態處理程序嗎?
這是否意味着如果擁有的類沒有與Android生命週期相關的任何字段並且不是Activity/Service /等,則可以使用非靜態Handler?我本來會這麼想的,但林特警告並不關心外部階級是什麼階級。我知道我仍然可以泄漏我的外部類和領域,但在我的情況下,至少它幾乎沒有。
雖然我怎麼會泄漏上下文?在我的情況下,外部類只有兩個字段(兩個字符串數組),並沒有擴展任何內容。當然,處理程序會以某種方式引用上下文,但除非我誤認爲我無法避免處理程序自身泄漏,對嗎?處理程序是否具有對其外部類的引用對它是否泄漏沒有影響;它只會影響泄漏時發生的情況。 –
處理程序引用上下文的常用方法是作爲Activity的非靜態內部類,因此具有對Activity的隱式引用。這聽起來像你理解這一點。我並不是想暗示你的處理程序必然會泄露一個上下文。 –