发现Android活动是否正在运行

cod*_*ber 6 android android-c2dm android-activity

我正在使用C2DM,我的BroadcastReceivers将C2DM事件传播到本地服务.该服务通过将id发送到我的webserver来完成注册,它负责让设备知道新消息,但是如果应用程序(其中一个活动)已启动,我们希望用新数据向该活动发送意图,它可以更新,如果不是NotificationManager用于通知用户.

问题是,如何知道活动正在运行?Application对象不是一个选项,因为Service是应用程序的一部分,它显然会出现.在每个应用程序的onDesroy中取消注册也不是一个选项,因为它可能会在方向更改中发生...

完成任何标准方法吗?

ρяσ*_*я K 17

解决方案1: 您可以使用ActivityManager检查活动是否正在运行:

public boolean isActivityRunning() { 

ActivityManager activityManager = (ActivityManager)Monitor.this.getSystemService (Context.ACTIVITY_SERVICE); 
    List<RunningTaskInfo> activitys = activityManager.getRunningTasks(Integer.MAX_VALUE); 
    isActivityFound = false; 
    for (int i = 0; i < activitys.size(); i++) { 
        if (activitys.get(i).topActivity.toString().equalsIgnoreCase("ComponentInfo{com.example.testapp/com.example.testapp.Your_Activity_Name}")) {
            isActivityFound = true;
        }
    } 
    return isActivityFound; 
} 
Run Code Online (Sandbox Code Playgroud)

需要为您的清单添加权限..

<uses-permission  android:name="android.permission.GET_TASKS"/>
Run Code Online (Sandbox Code Playgroud)

解决方案2: 您可以在活动中使用静态变量来检查它是否正在运行,并将其存储在服务或广播接收器访问的位置:

static boolean CurrentlyRunning= false;
      public void onStart() {
         CurrentlyRunning= true; //Store status of Activity somewhere like in shared //preference 
      } 
      public void onStop() {
         CurrentlyRunning= false;//Store status of Activity somewhere like in shared //preference 
      }
Run Code Online (Sandbox Code Playgroud)

我希望这可以帮到你!

  • 不要使用第一种方法.从ActivityManager文档:"注意:此方法仅用于调试和呈现任务管理用户界面.这绝不应该用于应用程序中的核心逻辑,例如根据此处的信息在不同的行为之间做出决定." (7认同)