【发布时间】:2017-07-27 18:44:51
【问题描述】:
我为 Android 操作系统构建了一个聊天,我想一直连接到 firebase。我的建议是实现一个后台服务,检测与 firebase 的断开连接并在断开连接后重新连接。 我的服务代码:
public class FirebaseConnection extends Service {
DatabaseReference connectedRef;
@Override
public void onCreate() {
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
connectedRef = FirebaseDatabase.getInstance().getReference(".info/connected");
connectedRef.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot snapshot) {
boolean connected = snapshot.getValue(Boolean.class);
if (connected) {
System.out.println("connected");
} else {
connectedRef.goOnline();
System.out.println("not connected");
}
}
@Override
public void onCancelled(DatabaseError error) {
System.err.println("Listener was cancelled");
}
});
return START_STICKY;
}
@Override
public IBinder onBind(Intent intent) {
return mBinder;
}
}
这个解决方案还不够,我看到它在短时间内断开连接后重新连接,但几个小时后它无法重新连接并且连接结束。
请帮我找到解决办法
【问题讨论】:
-
不要尝试在应用不活动时保持数据库连接处于活动状态。虽然它可能在您构建它时工作,但它可能会在其他设备上失败(如果不是现在,那么在未来的 Android 版本中)。当应用程序未处于活动状态时,它不应保持网络连接打开。要在应用处于非活动状态时与其通信,请使用 Firebase Cloud Messaging。
-
我可以执行定期 goOnline 保持连接吗?
标签: android firebase firebase-realtime-database connection keep-alive