繁体   English   中英

如何显示用户在线?

[英]How to show Online of a user?

我正在尝试开发一个可以在线显示所有用户的应用程序...我正在通过以下方式实现它

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

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

我没有使用ondisconnect,因为只有在应用程序完全关闭(不在后台运行)时,它才会脱机显示。 所以我在每个活动上都使用了这种方法...但是问题是,每当我打开一个活动时,它都会在线显示,下一秒会变为离线...我猜是因为上一个活动在打开新活动后关闭,所以当前活动的开始将在下一个活动的停止之前执行。 因此,由于活动的onstop最后执行,因此显示为脱机。 我该如何解决这个问题

您的猜测是完全正确的。

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

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

如果您切换到使用单一活动架构,那么您当前的代码将没有问题,该架构只是使用单个活动,并使其显示不同的片段而不是新的活动。 此解决方案将与您现有的代码一起使用,因为onStop()onStart()仅在您的应用进入后台时才会调用。

如果您查看官方的Android开发者博客中的“ 导航”部分 ,您会发现Google希望鼓励开发者改用单一活动架构。

但是,如果您仍然希望使用多个活动,则可能需要考虑一种替代方法来跟踪在线状态,以考虑到多个活动。

例如,您可以使用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;
}

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

请记住,这仅是示例,并未考虑应用程序的设计方式。 最重要的是,您必须考虑一个解决方案,该解决方案考虑到显示的多个活动。

我强烈建议采用单一活动方法。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM