Rya*_*yan 7 android memory-leaks firebase firebase-storage
我做了一些合理的研究,找不到我需要的答案.
我所知道的:当我将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
};
Run Code Online (Sandbox Code Playgroud)
我认为这足以向您展示我的意思.这就是我的实际代码目前的结构.
问题:
我想这只是计划不周和缺乏知识的结果(我只是为了好玩而不是为了工作而编程)所以如果我必须采取艰难的路线,我想这是一种学习经历,对吧?
当活动停止时自动取消注册侦听器是android及其派生类(StorageTask)中类"Task"的一个功能.
这意味着您可以执行以下操作:
UploadTask uploadTask = ref.putFile(uploadFile);
uploadTask.addOnFailureListener(thisActivity, new OnFailureListener() {
//@Override code here
}).addOnSuccessListener(thisActivity, new OnSuccessListener<UploadTask.TaskSnapshot>() {
//@Override code here
}).addOnProgressListner(thisActivity, new OnProgressListner<UploadTask.TaskSnapshot>() {
//@Override code here
};
Run Code Online (Sandbox Code Playgroud)
您还可以使用实时数据库返回的Task对象(如setValue)执行此操作,如下所示:
databaseReference.setValue("newValue").addOnSuccessListener(thisActivity, ...)
Run Code Online (Sandbox Code Playgroud)
所以直接回答你的问题:
使用活动范围版本在活动停止时自动取消注册侦听器.请注意,对于存储,您可以在活动开始时使用StorageReference.getActiveUploadTasks和StorageReference.getActiveDownloadTasks查询正在运行的操作并重新订阅.
如果使用作用域侦听器,则不需要手动取消订阅.我不知道批量取消订阅非基于任务的侦听器的方法.
好吧,我不确定你怎么能保证操作系统总能杀死你的任务而不是再次停止/启动它 - 以及你的完成代码将如何保证运行.我建议你将代码移到onStart
归档时间: |
|
查看次数: |
2526 次 |
最近记录: |