Android:如何检查活动是否正在运行?

新手上路,请多包涵

是否有任何简单的方法来确定某个活动是否处于活动状态?我想根据活动的活动来做某些事情。例如:

 if(activityrunning == activity1)
//do this
else if (activityrunning == activity2)
//do something else

原文由 user560571 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 304
2 个回答

您可以在活动中使用 static 变量。

 class MyActivity extends Activity {
     static boolean active = false;

      @Override
      public void onStart() {
         super.onStart();
         active = true;
      }

      @Override
      public void onStop() {
         super.onStop();
         active = false;
      }
}

唯一的问题是,如果您在两个相互链接的活动中使用它,那么第一个上的 onStop 有时会在第二个上的 onStart 之后调用。所以两者都可能是正确的。

取决于您要做什么(从服务更新当前活动?)。您可以在您的活动 onStart 方法的服务中注册一个静态侦听器,然后当您的服务想要更新 UI 时,正确的侦听器将可用。

原文由 siliconeagle 发布,翻译遵循 CC BY-SA 3.0 许可协议

这就是我想出的帮助跟踪不同活动的方法,它们的类派生自一个基本的“助手”类。

 protected static Dictionary<string, bool> _activityInstances = new Dictionary<string, bool>();
protected static Dictionary<string, bool> _activitiesVisible = new Dictionary<string, bool>();

protected override void OnStart()
{
    base.OnStart();
    _activityInstances[this.GetType().Name] = true;
}

protected override void OnDestroy()
{
    _activityInstances[this.GetType().Name] = false;
    base.OnDestroy();
}

protected override void OnResume()
{
    base.OnResume();
    _activitiesVisible[this.GetType().Name] = true;
}

protected override void OnPause()
{
    _activitiesVisible[this.GetType().Name] = false;
    base.OnPause();
}

public static bool activityIsInstanced(string type)
{
    return _activityInstances.ContainsKey(type) ? _activityInstances[type] : false;
}

public static bool activityIsVisible(string type)
{
    return _activitiesVisible.ContainsKey(type) ? _activityInstances[type] : false;
}

它可以继承,但为了运行测试(即在启动特定活动的新副本之前),您需要使用类的名称调用静态方法,例如

    if (!SettingsEdit.activityIsInstanced("SettingsEdit"))
    {
        Intent intent = new Intent(this, typeof(SettingsEdit));
        Bundle bundle = new Bundle();
        bundle.PutString(MY_SETTING, this.someSetting);
        intent.PutExtras(bundle);
        this.StartActivityForResult(intent, 0);
    }

如果它对任何人有帮助,我想我会在这里分享。

原文由 dooferorg 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题