Firebase onDisconnect未调用

时间:2016-10-24 14:11:22

标签: android firebase firebase-realtime-database

我试图在我的应用上减少一些活动连接。因此,当应用程序在后台时,我希望与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函数。

这不是出乎意料的行为吗?

0 个答案:

没有答案