这个blog中有提到
If a listener is registered like this in an Activity, and it's not removed before the Activity is destroyed, there is a possibility of an Activity leak.
我是否应该删除此监听器以在 onStop()
中将数据保存到实时数据库中?还是保存后会自动删除?
databaseReference.setValue(chatMessage)
.addOnSuccessListener(new OnSuccessListener<Void>() {
@Override
public void onSuccess(Void aVoid) {
// Codes for successful!
}
});
最佳答案
在谈论 Firebase 实时数据库监听器时,是的,您需要根据 Activity 的生命周期相应地删除它们。
让你的听众保持活跃,你最终会浪费资源。所以:
- 如果您在
onStart
中添加了监听器,则必须在onStop
中将其删除。 - 如果您在
onResume
中添加了监听器,则必须在onPause
中将其删除。 - 如果您在
onCreate
中添加了监听器,则必须在onDestroy
中将其删除。
但请记住,onDestroy
不会
总是被调用,因此最后一个选项并不总是一个好的选择。
删除列表器的最简单方法是将 Activity 的实例作为第一个参数传递给 addOnSuccessListener()
方法。为此,请参阅任务的 addOnSuccessListener(Activity activity, OnSuccessListener listener) :
Adds an Activity-scoped listener that is called if the Task completes successfully.
The listener will be called on the main application thread. If the Task has already completed successfully, a call to the listener will be immediately scheduled. If multiple listeners are added, they will be called in the order in which they were added.
The listener will be automatically removed during onStop().
关于java - 我是否需要关闭 addOnSuccessListener 才能保存到数据库(setValue)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56556122/