我做了相当多的研究,但找不到我需要的答案。
我所知道的是:当我将 ValueEventListener 附加到数据库引用时,我知道稍后需要将其删除(现在发现很难解决,因为存在大量内存泄漏。
我不知道的是:我还需要分离所有其他侦听器吗?(这包括 Firebase 数据库、存储和身份验证,这三个我正在使用的 API)
Example:
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() (或者其他任何东西)
杀死一个活动,尽管我猜这不能保证)并从头开始重新创建活动?
这是一个小型简单的应用程序,因此重新创建活动的开销
没什么大不了的。只是好奇什么是“正确”。
我想这只是计划不周和缺乏知识的结果(不幸的是,我编程只是为了好玩,而不是为了工作)所以如果我必须走艰难的路线,我想这是一次学习经历,对吗?
当活动停止时自动取消注册侦听器是 android 中“Task”类及其派生类(StorageTask)的一项功能。
这意味着您可以执行以下操作:
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
};
您还可以使用从实时数据库返回的任务对象(例如 setValue)来执行此操作,如下所示:
databaseReference.setValue("newValue").addOnSuccessListener(thisActivity, ...)
所以直接回答你的问题:
使用活动范围版本在活动停止时自动取消注册侦听器。请注意,对于存储,您可以在 Activity 启动时使用 StorageReference.getActiveUploadTasks 和 StorageReference.getActiveDownloadTasks 查询正在运行的操作并重新订阅。
如果使用范围侦听器,您不需要手动取消订阅。我不知道有什么方法可以批量取消订阅非基于任务的侦听器。
好吧,我不确定如何保证操作系统总是终止您的任务而不是停止/重新启动它 - 以及如何保证您的完成代码运行。我建议你将代码移至 onStart
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)