如何停止检测 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)
我想从 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)