我应该删除ValueEventListener吗?

Sre*_*hat 1 java multithreading android firebase firebase-realtime-database

        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) {

            }
        });
Run Code Online (Sandbox Code Playgroud)

我理解ValueEventListener在一个新线程中运行,我是否应该在任何时候实际删除它以进行正确的线程管理?(没有太多并行运行的线程的示例).如果是的话,该怎么办?

Ale*_*amo 6

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

databaseReference.removeEventListener(valueEventListener);
Run Code Online (Sandbox Code Playgroud)

请记住,如果你不这样做,你最终会浪费你的电池和带宽.所以:

  1. 如果您已添加了侦听器,onStart则必须将其删除onStop.
  2. 如果您已添加了侦听器,onResume则必须将其删除onPause.
  3. 如果您已添加了侦听器,onCreate则必须将其删除onDestroy.

但要记住onDestroynot总是叫,所以并不总是一个不错的选择最后一个选项.

还有另一种方法,不需要删除监听器,这是在使用addListenerForSingleValueEvent时:

为此位置的数据中的单个更改添加侦听器.