Я создаю приложение с функциями чата. Я использую Firebase в качестве базы данных и пытаюсь добавить службу, которая уведомляет вас, когда вы получаете сообщение, когда вы находитесь за пределами приложения, и останавливается, как только вы получаете уведомление один раз для пользователя, с которым вы общаетесь, но по какой-то причине. Когда я запускаю сервис, он запускается один раз, затем останавливается и не ждет уведомлений, кто-нибудь знает почему?
рассматриваемый код
public class Pmessginfnotifiysvc extends Service {
Thread thread;
FirebaseAuth auth12;
Boolean first;
long stop;
DatabaseReference databaseReference;
ValueEventListener valueEventListener;
@Nullable
@Override
public IBinder onBind(Intent intent) {
return null;
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
thread = new Thread(new msgtracker());
thread.setPriority(Thread.MAX_PRIORITY);
thread.start();
return START_STICKY;
}
private class msgtracker implements Runnable{
public msgtracker(){}
@Override
public void run() {
if (!thread.isInterrupted()){
auth12 = FirebaseAuth.getInstance();
databaseReference = FirebaseDatabase.getInstance().getReference().child("Users").child(auth12.getCurrentUser().getUid());
databaseReference.child("PChat").addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
first = true;
stop = dataSnapshot.getChildrenCount();
for (final DataSnapshot kid:dataSnapshot.getChildren()) {
final DatabaseReference db = FirebaseDatabase.getInstance().getReference().child("Chat").child(kid.getValue().toString());
valueEventListener = new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
if (!first){
MyNotificationManager.getInstance(getApplicationContext()).displayNotification("TvTime",kid.getKey() + " Has Sent You A Message!");
db.removeEventListener(valueEventListener);
stop--;
}
else {
first = false;
}
if (stop == 0){
thread.interrupt();
stopSelf();
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
};
first = true;
db.addValueEventListener(valueEventListener);
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
}
}
}
}