1

我真正想要的是什么?

在我的应用程序中,我有 4/5 个活动和一个与服务器对话的后台线程。我想有一些方法来获得我的应用程序的最高活动。但令人惊讶的是,他们不是我能得到的吗?

我做了什么 ?

搜索了一段时间后,我实现了一个mCurrentOnTopActivity类型变量,并且Activity在每个活动中我都设置了该变量。(这实际上是一个坏方法)。onResume()onPause()

我到达了哪里?

现在他们的情况是,在从服务器接收到一些消息后,我想在 UI 线程上做一些事情,即显示一些对话框或刷新ListView,现在他们无法检查是否mCurrentOnTopActivity引用了实际运行的活动(完成或无论出于何种原因失去焦点)。

我现在想要什么? 现在我基本上需要帮助解决以下两个问题:-

  1. 我如何知道我的应用程序中当前运行最多的活动是什么?
  2. 我如何知道活动是否仍在运行(即我想要一些在andisActicitAlive() (imaginary function)调用之间返回 true 的东西?onResume()onPause()

我在活动中使用变量实现了 2 点并将其设置为onResume()onPause()。但是,这是唯一的方法吗?

4

2 回答 2

2
ArrayList<String> runningactivities = new ArrayList<String>();

ActivityManager activityManager = (ActivityManager)getBaseContext().getSystemService (Context.ACTIVITY_SERVICE); 

List<RunningTaskInfo> services = activityManager.getRunningTasks(Integer.MAX_VALUE); 

for (int i1 = 0; i1 < services.size(); i1++) { 
    runningactivities.add(0,services.get(i1).topActivity.toString());  
} 

if(runningactivities.contains("ComponentInfo{com.app/com.app.main.MyActivity}")==true){
    Toast.makeText(getBaseContext(),"Activity is in foreground, active",1000).show(); 
}

有了这个,您可以检查您正在寻找的活动是否正在运行。

esle,如果要使用onStart()andonStop()方法,可以使用下面的代码,

class MyActivity extends Activity {
     static boolean active = false;

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

      @Override
      public void onStop() {
         super.onStop();
         active = false;
      }
}
于 2012-12-13T09:56:27.087 回答
1

您可以使用服务绑定,以便只有最顶层的活动绑定到服务。

于 2012-12-13T09:58:30.640 回答