我有3 activities
,一个叠在一起
A -> B -> C -> D
D
中时,如何查找B在堆栈中是否可用这在Android中可行吗?
PS:我需要发布代码吗?..让我知道...因为这里只是活动而没有其他逻辑
答案 0 :(得分:1)
您可以使用ActivityManager来实现。下面是相同的代码,
ActivityManager m = (ActivityManager) ctx.getSystemService( ctx.ACTIVITY_SERVICE );
List<RunningTaskInfo> runningTaskInfoList = m.getRunningTasks(10);
Iterator<RunningTaskInfo> itr = runningTaskInfoList.iterator();
while(itr.hasNext()){
RunningTaskInfo runningTaskInfo = (RunningTaskInfo)itr.next();
int id = runningTaskInfo.id;
CharSequence desc= runningTaskInfo.description;
int numOfActivities = runningTaskInfo.numActivities;
String topActivity = runningTaskInfo.topActivity.getShortClassName();
}
这将为您提供所有活动。有关更多详细信息,请参阅文档
https://developer.android.com/reference/android/app/ActivityManager
答案 1 :(得分:0)
问题:将后退堆栈 ABCD 更改为 ACDB 。
解决方案::来自Android Developer文档。
FLAG_ACTIVITY_REORDER_TO_FRONT
public static final int FLAG_ACTIVITY_REORDER_TO_FRONT
如果在传递给Context#startActivity的Intent中进行设置,则此标志将 使启动的活动被带到任务的最前面 历史记录堆栈(如果已在运行)。
例如,考虑一个由四个活动组成的任务:A,B,C, D.如果D使用解析为Intent的Intent调用startActivity() 活动B的组成部分,那么B将被带到 历史记录堆栈,其结果顺序为:A,C,D,B。此标志将 如果还指定了FLAG_ACTIVITY_CLEAR_TOP,则将被忽略。
答案 2 :(得分:-1)
在基本活动中,创建活动类型的数组列表。
public static ArrayList<Activity> activityArrayList = new ArrayList<>();
在更改活动时,只需在下一个活动中添加一行
BaseActivity.activityArrayList.add(this);
这些活动已添加到arrayList中,现在您可以轻松地从数组列表中添加或删除您选择的任何活动,例如,我在Base Activity中创建了多个功能,以删除所有活动或删除除main之外的所有活动
public static void finishAllExceptMain() {
try {
//Constants.logMessage(Constants.TAG, "outer Start Size: " + activityArrayList.size());
int count = activityArrayList.size();
while (count > 1) {
count--;
activityArrayList.get(count).finish();
activityArrayList.remove(count);
}
} catch (Exception e) {
}
}
public static void finishLastActivity() {
int lastActivity = activityArrayList.size() - 1;
activityArrayList.get(lastActivity).finish();
activityArrayList.remove(activityArrayList.get(lastActivity));
}