【发布时间】:2017-07-11 06:55:46
【问题描述】:
最近,我在使用 Firebase ValueEventListeners 的每个 Fragment 和 Activity 中都遇到了内存泄漏。我不确定为什么会这样。一切都很好,直到我尝试清理我的代码(比如重命名我的片段、活动、将所有模型类移动到一个单独的包)。除了内存泄漏,一切都运行良好。
过去几个小时我一直试图找出问题所在,但徒劳无功。这就是我在每个 Fragment 和 Activity 中使用 ValueEventListeners 的方式。
private ValueEventListener articleListener;
在 onCreate() 中,我创建了一个返回 ValueEventListener 的方法
private ValueEventListener articleListener() {
articleListener = new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
ModelImage model = dataSnapshot.getValue(ModelImage.class);
ImageCoverImageUrl = model.getImageCoverImageUrl();
ImageTitle = model.getImageTitle();
}
@Override
public void onCancelled(DatabaseError databaseError) {/*Do Nothing*/}
};
return articleListener;
}
现在定义数据库引用。
dbArticle = dbRoot
.child(getResources().getString(R.string.Child_Articles))
.child(ArticleLanguage)
然后这行代码
dbArticle.addValueEventListener(articleListener());
最后在 onDestroy() 内部,
if (dbArticle != null && articleListener != null) {
dbArticle.removeEventListener(articleListener);
}
最后是泄漏金丝雀的截图。
PS:我没有在我的任何 Activity/Fragment 中使用任何匿名 ValueEventListeners。然而,每个 Activity 和 Fragment 都会在 LeakCanary 中使用以下信息泄漏内存
顺便说一句。 我仍在使用 Firebase 库版本 10.2.6
谁能帮我确定,出了什么问题?
谢谢。
【问题讨论】:
-
我对泄漏金丝雀的工作并不多,但在我有限的经验中,我收到了一些误报。也许你想跟踪你的记忆,看看是否真的有泄漏。 developer.android.com/studio/profile/android-monitor.html
标签: android firebase memory-leaks firebase-realtime-database