我试图在我的应用上减少一些活动连接。因此,当应用程序在后台时,我希望与firebase
数据库断开连接。
所以我的MainActivity
是启动器活动。从此活动开始的所有其他活动都是从它开始的。并且MainActivity
在启动新活动时永远不会被销毁。所以,我提出了一个非常简单的逻辑来连接和断开Firebase Database
,如下所示:
在我的应用程序的onCreate中:
@Override
public void onCreate() {
...
// Check for the connection state
final DatabaseReference presenceRef = FirebaseDatabase.getInstance().getReference("testing");
// Write a string when this client loses connection
presenceRef.onDisconnect().setValue("Disconnected");
FirebaseDatabase.getInstance().getReference(".info/connected").addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
if (dataSnapshot.getValue(Boolean.class)) {
Log.v(TAG, "I am just connected");
presenceRef.setValue("Connected");
}
else {
Log.v(TAG, "I am just disconnected");
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
Log.v(TAG, "database connection error: " + databaseError.getMessage());
}
});
..
}
我的连接和断开逻辑在MainActivity
中设置如下:
protected void onCreate(Bundle savedInstanceState) {
...
FirebaseDatabase.getInstance().goOnline();
...
}
@Override
protected void onDestroy() {
FirebaseDatabase.getInstance().goOffline();
Toast.makeText(mContext, "Disconnecting", Toast.LENGTH_SHORT).show();
super.onDestroy();
}
如果按MainActivity
上的后退按钮,db将断开连接。但是,如果我按下主页按钮,我就不会断开它,因为onDestroy
将不会被调用。
但是当我去最近并轻扫我的应用程序时,我仍然可以在测试位置看到“已连接”。我在某处读到onDisconnect
已在服务器端注册。因此,如果服务器看到客户端断开连接,则应调用onDisconnected
函数。
这不是出乎意料的行为吗?