我真正想要的是什么?
在我的应用程序中,我有4/5个活动和一个与服务器通信的后台线程。我想通过某种方式获得我应用的最顶层活动。但令人惊讶的是他们不可能得到那个?
我做了什么?
搜索了一段时间后,我实施了mCurrentOnTopActivity
类型Activity
的变量onResume()
以及我设置该变量的每个活动的onPause()
和ListView
。 (这实际上是一种糟糕的方式)。
我到达的地方?
现在他们的情况是,在收到来自服务器的一些消息之后我想在UI线程上做一些事情,即显示一些对话框或刷新mCurrentOnTopActivity
,现在他们无法检查{{1}指的是实际运行与否的激活(无论出于何种原因完成或失焦)。
我现在想要什么? 现在我基本上想要帮助解决两个问题: -
isActicitAlive() (imaginary function)
之类的内容在onResume()
和onPause()
的来电之间返回true?我在活动中使用变量并在onResume()
和onPause()
中设置了2点。但是,这是唯一的方法吗?
答案 0 :(得分: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;
}
}
答案 1 :(得分:1)
您可以使用service binding,以便只有最顶级的活动才能与服务绑定。