此blog
中已提及如果在活动中以这种方式注册了侦听器,则不是 在活动销毁之前删除,有可能 活动泄漏。
是否应该删除此侦听器以将数据保存在onStop()
中的实时数据库上?还是在保存操作后会自动将其删除?
databaseReference.setValue(chatMessage)
.addOnSuccessListener(new OnSuccessListener<Void>() {
@Override
public void onSuccess(Void aVoid) {
// Codes for successful!
}
});
答案 0 :(得分:2)
在谈论Firebase实时数据库侦听器时,是的,您需要根据活动的生命周期将它们相应地删除。
让监听器保持活动状态,最终将浪费资源。所以:
onStart
中添加了侦听器,则必须在onStop
中将其删除。onResume
中添加了侦听器,则必须在onPause
中将其删除。onCreate
中添加了侦听器,则必须在onDestroy
中将其删除。但是请记住,onDestroy
总是被称为 not
,因此最后一个选项并不总是一个好的选择。
删除列表器的最简单方法是将Activity实例作为第一个参数传递给addOnSuccessListener()
方法。为此,请参见Task的addOnSuccessListener(Activity activity, OnSuccessListener listener):
添加一个活动范围侦听器,如果任务成功完成,则将调用该侦听器。
将在主应用程序线程上调用侦听器。如果任务已经成功完成,将立即安排对侦听器的调用。如果添加了多个侦听器,则会按照添加的顺序调用它们。
监听器将在onStop()期间自动删除。
答案 1 :(得分:1)
该博客会继续告诉您确切的操作,以防止活动泄漏。您可以自己删除它,也可以使用活动范围侦听器(将活动作为addOnSuccessListener()
的第一个参数传递),该监听器在活动被破坏时会自动删除。