java - 我是否需要关闭 addOnSuccessListener 才能保存到数据库(setValue)?
问题描述
在这个博客中提到
如果一个监听器是这样注册在一个Activity中的,并且在Activity销毁之前没有被移除,那么就有可能发生Activity泄漏。
我应该删除此侦听器以将数据保存在实时数据库中onStop()
吗?还是会在保存操作后自动删除?
databaseReference.setValue(chatMessage)
.addOnSuccessListener(new OnSuccessListener<Void>() {
@Override
public void onSuccess(Void aVoid) {
// Codes for successful!
}
});
解决方案
在谈论 Firebase 实时数据库侦听器时,是的,您需要根据活动的生命周期相应地删除它们。
让你的听众保持活跃,你最终会浪费资源。所以:
- 如果您在 中添加了侦听器,
onStart
则必须在 中将其删除onStop
。 - 如果您在 中添加了侦听器,
onResume
则必须在 中将其删除onPause
。 - 如果您在 中添加了侦听器,
onCreate
则必须在 中将其删除onDestroy
。
但是记住onDestroy
总是not
被调用,所以最后一个选项并不总是一个好的选择。
删除列表器的最简单方法是将addOnSuccessListener()
您的活动实例作为第一个参数传递给该方法。为此,请参阅 Task 的addOnSuccessListener(Activity activity, OnSuccessListener listener):
添加一个 Activity 范围的侦听器,如果 Task 成功完成,则调用该侦听器。
侦听器将在主应用程序线程上调用。如果任务已经成功完成,将立即安排对侦听器的调用。如果添加了多个监听器,它们将按照添加的顺序被调用。
在 onStop() 期间监听器将被自动删除。
推荐阅读
- android - 如何处理关闭 RadioButtonDialog
- html - opendatakit 是否提供从 Xfrom 转换 html 的功能
- c# - 微服务 api 网关中的路由属性问题
- reactjs - 网址参数未显示Reactjs
- scrapy - 提取后如何转换值?
- mermaid - 在 Mermaid CLI 中设置 mermaid.initialize 属性
- firebase - 同一iOS应用的Google驱动器,Firebase不同的客户端ID
- swift - 自动布局不适合我所有的屏幕尺寸
- python - 更新 SQLAlchemy 中对象的特定字段
- python - Python 2.7 Tkinter 标签虽然活跃但未显示