![](/img/trans.png)
[英]Does the Android Data Binding Library hold Strong References on It's Callbacks?
[英]When it is ok to use strong references in android and does this code leak?
我不清楚什么時候最好使用WeakReference
來避免 android 中的內存泄漏。 例子:
片段中的代碼:
containerView.setDataForDisplay(customer, new CustomListener() {
@Override
public void buttonClicked(@NonNull Customer customer) {
if(handler != null) {
handler.buttonClickedForCustomer(customer);
}
}
});
自定義LinearLayout
的代碼
public void setDataForDisplay(List<Customer> customer, CustomListener listener) {
// view setup code
someView.setOnClickListener( v -> {
if(listener != null) {
listener.buttonClicked(v.getTag());
}
});
}
匿名類CustomListener
具有對包含片段的this
的引用。
該匿名類作為偵聽器傳遞給包含視圖,該視圖最終會執行回調。
我的問題是這會導致內存泄漏嗎?
listener
應該以某種方式保持在WeakReference
嗎? 我們如何決定何時可以使用強引用還是弱引用?
現代 JVM 有一個非常強大的垃圾收集器。 它通過檢測與 gc 根完全隔離的對象,設法收集甚至循環引用。 您可以在此處閱讀有關此主題的更多信息: 垃圾收集的真正工作原理
通過使用弱引用。 但是,您可以加快 gc 的工作,因為在此對象上的所有強引用都消失后,將立即收集此引用。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.