当前位置: 首页 > 面试题库 >

我是否应该删除ValueEventListener?

宫坚
2023-03-14
问题内容
       DatabaseReference Ref = FirebaseDatabase.getInstance().getReference(Constants.Client + "/" + path);
        Ref.keepSynced(true);
        Ref.addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(DataSnapshot dataSnapshot) {

            }

            @Override
            public void onCancelled(DatabaseError databaseError) {

            }
        });

我知道该ValueEventListener线程在新线程中运行,是否应该在任何时间删除此线程以进行适当的线程管理?(例如,没有太多并行运行的线程)。如果是,该怎么办?


问题答案:

在谈论监听器时,是的,您需要根据活动的生命周期将其删除,为此,您需要使用以下代码行:

databaseReference.removeEventListener(valueEventListener);

请记住,如果不这样做,最终将浪费您的电池和带宽。所以:

  1. 如果已在中添加了侦听器,则onStart必须在中将其删除onStop。
  2. 如果已在中添加了侦听器,则onResume必须在中将其删除onPause。
  3. 如果已在中添加了侦听器,则onCreate必须在中将其删除onDestroy。
    但要记住onDestroy的not总是叫,所以并不总是一个不错的选择最后一个选项。

还有另一种方法,其中不需要删除侦听器,即使用addListenerForSingleValueEvent时:

为该位置的数据中的单个更改添加一个侦听器。



 类似资料:
  • 问题内容: 假设我们有两个实体,A和B。B与A具有多对一关系,如下所示: 现在,我要删除对象,并将删除操作级联到其所有子项。有两种方法可以做到这一点: 添加到OneToMany批注中,让JPA删除所有子项,然后再从数据库中删除A对象。 保持类不变,只需让数据库级联删除操作即可。 使用后面的选项有什么问题吗?这会导致实体管理器保留对已删除对象的引用吗?我之所以选择选项2而不是选项1的原因是,选项1生

  • 我正在使用Inno Setup安装和更新我的python应用程序。 更新时,安装程序不会删除以前安装的py文件,这会产生两个问题: > 我使用的是插件:如果我在新版本中删除了插件,它仍然适用于执行更新的用户。 <罢工>卸载更新的安装时,将不会删除旧安装中的文件。(无法复制…) 如何在升级之前强制Inno安装程序卸载我的应用程序? 这是我的脚本:

  • 我最近开始使用AWS,我的第一项工作是使用lambda函数使用SQS队列。 我知道我不需要调用receiveMessage,因为lambda函数已经在这里接收消息: 我的问题是:我应该给sqs打电话吗。是否为收到的每条消息删除消息?我知道lambda函数会自动删除已处理的消息,但一位朋友告诉我,我仍然需要手动调用deleteMessage,因为如果发生错误,如果我不手动删除每条消息,所有消息都会返

  • 如何在Databricks中删除Delta表?我在文档中找不到任何信息……也许唯一的解决方案是使用magic命令或dbutils删除文件夹“delta”中的文件: 编辑: 为了澄清,我在这里举了一个非常基本的例子。 例子: 并将其保存在增量表中 然后,如果我尝试删除它……这是不可能的删除表或类似的行动 其他选项,如删除表“增量/测试表”等...

  • 在我决定问它之前,我通过编程搜索了一些去除色调的颜色,但它被标记为重复,所以我不知道这是否也是重复的?因为它没有回答我的问题,我想。 因为我还在问是否可以在更改后重置或删除的色调。 这是正常图像 这是选定的图像 这是取消选择图像后再次出现的正常图像 这是我的代码。 我还尝试了但图像变白或消失。我还尝试了,但图像什么也不做,变成最后一个图像。 我正在使用材料设计图标。 我想将图像恢复为正常的,正如您