0

我正在尝试让一个应用程序在线显示所有用户......我正在使用以下方式来实现它

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

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

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

4

1 回答 1

0

你的猜测是完全正确的。

启动一个新的 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;
}

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

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

于 2018-07-09T02:55:36.347 回答