【发布时间】:2016-09-11 03:22:38
【问题描述】:
我进行了合理的研究,但找不到我需要的答案。
我所知道的:当我将 ValueEventListener 附加到数据库引用时,我知道我需要稍后将其删除(现在很难通过大量内存泄漏找到它。
我不知道的事情:我还需要分离所有其他侦听器吗? (这包括 Firebase 数据库、存储和身份验证,我正在使用的三个 API)
例子:
UploadTask uploadTask = ref.putFile(uploadFile);
uploadTask.addOnFailureListener(new OnFailureListener() {
//@Override code here
}).addOnSuccessListener(new OnSuccessListener<UploadTask.TakeSnapshot>() {
//@Override code here
}).addOnProgressListner(new OnProgressListner<UploadTask.TakeSnapshot>() {
//@Override code here
};
我认为这足以说明我的意思。这就是我的实际代码目前的结构。
问题:
- 我是否需要删除所有这些侦听器以防万一活动 在此之前被终止(系统决定,电话死机等) 回调发生了吗?
- 我能否以某种方式将它们捆绑在一起并同时终止它们所有三个 因为我的代码中有 30 个这样的东西,而且真的不觉得 就像重组所有这些以便分配所有这些听众 到变量只是这样我就可以将它们传递给 “removeBlahBlahBlahListener(listenerVariable)”一遍又一遍。
- 有点跑题了,但是我懒得把我所有的代码都从 onCreate 到 onStart... 对我来说删除所有这些是不好的做法 听众,完成事情,调用finish()(或其他任何东西 杀死一个活动,虽然我想这不能保证)并且只是从头开始重新创建活动? 这是一个简单的小应用程序,因此重新创建活动的开销 没什么大不了的。只是好奇什么是“正确的”。
我想这只是计划不周和缺乏知识的结果(我只是为了好玩而不是为了工作而编程)所以如果我不得不走艰难的路线,我想这是一种学习经历,对吧?
【问题讨论】:
-
我很困惑。您展示的示例代码是 Firebase 存储的进度侦听器。但是您的文字显然是关于数据库的。您遇到了哪一个问题?
-
对弗兰克的困惑感到抱歉。我本来可以更清楚的。我正在使用 Firebase 的两个 API(数据库和存储),并且两者都有监听器。我想我的问题确实适用于两者。我猜一般来说 Firebase 监听器以及当他们需要和不需要分离/删除时。例如,是否有一些 FB 侦听器会在 Activity 移出视图时自行处理,或者即使在 onPause/Stop/Destroy 等之后,每个侦听器(DB 和存储)也会继续侦听。
标签: android memory-leaks firebase firebase-storage