在本博客中提到了
如果侦听器在活动中这样注册,并且在活动被销毁之前未被删除,则存在活动泄漏的可能性。
我是否应该删除此侦听器,以便在onStop()中保存实时数据库中的数据?或者在保存操作之后会自动删除它吗?
databaseReference.setValue(chatMessage)
.addOnSuccessListener(new OnSuccessListener<Void>() {
@Override
public void onSuccess(Void aVoid) {
// Codes for successful!
}
});发布于 2019-06-12 06:52:48
当谈到Firebase实时数据库侦听器时,是的,您需要根据活动的生命周期相应地删除它们。
保持侦听器活动,最终会浪费资源。所以:
onStart中添加了侦听器,则必须在onStop中删除它。onResume中添加了侦听器,则必须在onPause中删除它。onCreate中添加了侦听器,则必须在onDestroy中删除它。但是请记住,not总是调用onDestroy,所以最后一个选项并不总是一个好的选择。
删除lister的最简单方法是将addOnSuccessListener()方法作为第一个参数传递给您的活动的实例。有关这一点,请参见任务的addOnSuccessListener(活动活动,OnSuccessListener侦听器)
添加一个在任务成功完成时调用的活动范围侦听器。 将在主应用程序线程上调用侦听器。如果任务已成功完成,将立即安排对侦听器的调用。如果添加了多个侦听器,则将按照添加的顺序调用它们。 侦听器将在()期间被自动删除。
发布于 2019-06-12 06:51:45
博客还会告诉你你需要做些什么来防止活动泄漏。您可以自己删除它,也可以使用活动范围内的侦听器(将活动作为addOnSuccessListener()上的第一个参数传递),该监听器在活动被销毁时会自动删除。
https://stackoverflow.com/questions/56556122
复制相似问题