2012-12-13 148 views
1

我究竟想要什么?Android活动生命周期问题

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

我做了什么?

搜索一段时间后,我实现了Activity类型的变量mCurrentOnTopActivityonResume()和我设置变量中的每个活动的onPause()。 (这实际上是一个不好的方法)。

我到达了哪里?

现在,他们都在从服务器接收的一些消息后,我想要做的UI线程一些东西,即表现出一定的对话框或刷新ListView案件,现在他们是没有办法检查是否mCurrentOnTopActivity指的activiy这是实际运行或不运行(无论出于何种原因完成或失去焦点)。

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

  1. 我怎么知道这是我的应用程序的当前运行的最上面的活动?
  2. 我怎么知道活动是否仍在运行与否(即我想要一些东西一样isActicitAlive() (imaginary function)其中onResume()电话和onPause()

我使用活动的变量,并设置它实现2点之间返回true在onResume()onPause(),但是,这是做到这一点的唯一途径?

回答

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()onStop()方法,你可以使用下面的代码,

class MyActivity extends Activity { 
    static boolean active = false; 

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

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

我目前正在使用你的答案的第二种方法。让我检查你的第一种方法的效率观点。现在查询ActivityManager并不会听起来很有效率,至少对我来说......任何方式都要感谢您的答案。 – aProgrammer

+0

我结束了一些修改后实现了你的建议。谢谢! – aProgrammer

+0

@Amit: - :)哪一个。?第一或第二种方法。 –

1

你可以使用service binding,只让最上面的活动结合的服务。

+0

我目前在我的应用程序中没有使用服务。我需要使用它吗? – aProgrammer

+0

对不起,我认为与服务器交谈的后台线程是作为服务实现的,但如果不是,我不会建议仅为此实现服务。 – 1615903