如何停止检测 firebase 实时数据库更改的服务

how to stop Services which detect changes in firebase realtime database

我想从 firebase 实时数据库中连续检索数据。我为此目的提供了一项服务,但该服务不会在调用 stopService 时停止。当我得到适当的数据时,我想停止服务。请帮忙。

我试过了

Intent intent = new Intent(MainActivity.this,BackgroundSoundService.class);  
stopService(intent);

但这并没有奏效。我还需要做什么才能停止此服务?

 @Override
public int onStartCommand(Intent intent, int flags, int startId) {
   IniTializeSpeech(getApplicationContext());
    mDatabase = FirebaseDatabase.getInstance().getReference();
    mDatabase.child("objectsData").addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
           String ss =(String) dataSnapshot.getValue();
           Log.i("OnDataChange",ss);
            t1.speak(dataSnapshot.getValue().toString(), TextToSpeech.QUEUE_FLUSH, null);
        }

        @Override
        public void onCancelled(@NonNull DatabaseError databaseError) {

        }
    });
    return Service.START_STICKY;
}

@Override
public void onDestroy() {
    super.onDestroy();
}

如果您只想获取一次数据,您可以使用 addListenerForSingleValueEvent:

mDatabase.child("objectsData").addListenerForSingleValueEvent(...

如果您有更复杂的情况,您可以使用您当前的代码进行注册。但是要稍后停止事件侦听器响应数据更改,您需要 remove that listener.

为此,您首先要在注册时保留对侦听器的引用:

ValueEventListener myListener = mDatabase.child("objectsData").addValueEventListener(...

然后您可以稍后将其删除:

mDatabase.child("objectsData").removeEventListener(myListener)