首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Android:如何检查activity是否正在运行?

Android:如何检查activity是否正在运行?
EN

Stack Overflow用户
提问于 2011-03-27 09:21:17
回答 21查看 297.1K关注 0票数 170

有没有什么简单的方法来确定某个活动是否处于活动状态?我想根据哪个活动处于活动状态来执行某些操作。例如:

代码语言:javascript
复制
if(activityrunning == activity1)
//do this
else if (activityrunning == activity2)
//do something else
EN

回答 21

Stack Overflow用户

回答已采纳

发布于 2011-03-27 09:48:19

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

代码语言:javascript
复制
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之后被调用。因此,这两种观点可能都是正确的。

这取决于您尝试执行的操作(从服务更新当前活动?)。您只需在activity onStart方法中的服务中注册一个静态侦听器,然后当您的服务想要更新UI时,正确的侦听器将可用。

票数 251
EN

Stack Overflow用户

发布于 2019-04-15 18:30:14

我意识到这个问题已经很老了,但我认为它仍然值得分享我的解决方案,因为它可能对其他人有用。

在Android架构组件发布之前,该解决方案不可用。

活动至少部分可见

代码语言:javascript
复制
getLifecycle().getCurrentState().isAtLeast(Lifecycle.State.STARTED)

活动在前台

代码语言:javascript
复制
getLifecycle().getCurrentState().isAtLeast(Lifecycle.State.RESUMED)
票数 85
EN

Stack Overflow用户

发布于 2012-05-31 23:45:34

我这样想得更清楚:

代码语言:javascript
复制
  public boolean isRunning(Context ctx) {
        ActivityManager activityManager = (ActivityManager) ctx.getSystemService(Context.ACTIVITY_SERVICE);
        List<RunningTaskInfo> tasks = activityManager.getRunningTasks(Integer.MAX_VALUE);

        for (RunningTaskInfo task : tasks) {
            if (ctx.getPackageName().equalsIgnoreCase(task.baseActivity.getPackageName())) 
                return true;                                  
        }

        return false;
    }
票数 45
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5446565

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档