Java 如何显示用户的在线状态?

Java 如何显示用户的在线状态?,java,android,android-activity,onstart,Java,Android,Android Activity,Onstart,我正在尝试获得一个应用程序来显示所有在线用户。。。我用下面的方法来实现它 @Override public void onStart(){ super.onStart(); mDatabaseReference.child("Online").setValue(true); } @Override public void onStop(){ super.onStop(); mDatabaseReference.child("Online").setVal

我正在尝试获得一个应用程序来显示所有在线用户。。。我用下面的方法来实现它

    @Override
public void onStart(){
    super.onStart();
    mDatabaseReference.child("Online").setValue(true);
}

@Override
public void onStop(){
    super.onStop();
    mDatabaseReference.child("Online").setValue(false);
}

我没有使用ondisconnect,因为只有当应用程序完全关闭(不在后台运行)时,它才会显示脱机。所以我在每项活动中都使用了这个方法。。。但问题是,每当我打开一个活动,它就会在线显示,下一秒就会变成离线。。。我猜这是因为上一个活动在打开新活动后关闭,所以presents活动的on start在下一个活动的on stop之前执行。因此,由于活动的顶部是最后一次执行,因此它显示为脱机。我如何解决这个问题你的猜测完全正确

启动新活动将导致为第一个活动调用onPause()onStop()方法

根据您的描述,我假设您希望在线状态保持为真,只要应用程序保持在前台,并且您将其放在每个活动中,因为您的应用程序不仅仅从单个主活动打开

如果切换到使用单个活动体系结构,当前代码将不会出现问题,也就是简单地使用单个活动,让它显示不同的片段而不是新的活动。此解决方案将与您现有的代码配合使用,因为只有当您的应用程序进入后台时才会调用onStop()onStart()

如果你看看Android开发者官方博客上的,你会发现谷歌希望鼓励开发者转向使用单活动架构

但是,如果您仍然希望使用多个活动,那么您可能需要考虑另一种方法来跟踪在线状态,以考虑多个活动。 例如,您可以使用int值,而不是使用简单的布尔值

@Override
public void onStart(){
    super.onStart();
    mDatabaseReference.child("Online").addValue();
}

@Override
public void onStop(){
    super.onStop();
    mDatabaseReference.child("Online").removeValue();
}
addValue()和removeValue()为:

private void addValue(){
activityCount++;
onlineStatus=true;
}
私有void removeValue(){
活动计数--;
如果(活动计数)
private void addValue(){
    activityCount++;
    onlineStatus = true;
}

private void removeValue(){
    activityCount--;
    if(activityCount <= 0)
        onlineStatus = false;
}