我正在研究一个项目,其中应用程序响应Firebase Realtime数据库中上载的命令,以监听我正在使用ValueEventListner
的Firebase Realtime数据库中的更改。在FRDB中上载的命令只能执行一次,然后从FRDB中删除(无论何时执行命令,都会从FRDB中将其删除,并再次调用onDataChanged,如果在“ command”节点下有多个命令,则它将被执行不止一次,要停止,我已经实现了以下代码)。我在addValueEventListener
onCreate
的{{1}}中呼叫了START_STICKY
。该应用程序还可以将其他数据上传到FRDB,这可以正常工作,但是service
工作不正常。
该代码可以正常运行3或4天,然后停止工作。我不知道怎么了,我完全迷路了。任何帮助,将不胜感激。
ValueEventListner
这是 mCommandsRef.addValueEventListener(new ValueEventListener() {
private long fcount = 0;
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
try {
Iterable<DataSnapshot> snapshots = dataSnapshot.getChildren();
if (fcount > dataSnapshot.getChildrenCount()) {
if (dataSnapshot.getChildrenCount() == 0) {
fcount = 0;
}
return;
}
int i = 0;
for (DataSnapshot snapshot : snapshots) {
if (i == 0) {
fcount = dataSnapshot.getChildrenCount();
}
long c = snapshot.getValue(Long.class);
executeCommand(c, snapshot);
i++;
}
} catch (DatabaseException | NullPointerException e) {
e.printStackTrace();
executeCommand(DATABASE_EXCEPTION_CODE, dataSnapshot);
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
方法:
executeCommand