有条件地清除 activity backstack
Conditionally clear activity backstack
我正在开发一个应用程序,您可以在该应用程序上共享本地 phone 的图库应用程序中的图像。每当通过图库应用分享照片时,Activity
A
都会在我的应用中打开。
照片共享遵循从 Activity A
到 Activity B
的一些步骤,B
的最后一步打开 Main Activity
。
如我所愿,从 B
向后按应该可以打开 A
。按 B
中的最后一个按钮应该从后台清除 A
和 B
,这样如果你按回 Main Activity
,应用程序应该关闭。
我做了什么:
最初,我是用这个标志 intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
打开 Main Activity
但是,这开始了一个新任务,所以即使我过去关闭我的应用程序并转到 phone 的图库应用程序,它也会显示 A
而不是该应用程序上的照片,当你按下返回,然后您可以在该图库应用程序中看到实际图像。
我已经为 A
和 B
指定了 android:noHistory="true"
并且在没有新任务标志的情况下开始 Main Activity
的意图。这解决了新任务问题,因为当我关闭我的应用程序并切换回图库应用程序时,它显示的是实际图像而不是我的 activity A
。但这里的问题是,我无法从 B
返回到 A
,而且如果应用程序被最小化,那么 activity 也会消失。
创建单例class :
Stack<Activity> stack;
public void add(Activity activity){
stack.add(activity).
}
public void remove(){
Activity activity = stack.lastElement();
if(activity != null) {
stack.remove(activity).
activity.finish();
}
}
public void removeAll() {
for (Activity activity : stack) {
if (activity != null)
activity.finish();
}
stack.clear();
}
在活动的 onCreate() 中调用 add()
调用删除将完成当前 activity
调用 removeAll 将完成添加到堆栈中的所有活动
Intent l = new Intent(getApplicationContext(), MainActivity.class);
l.addFlags(Intent.FLAG_ACTIVITY_NO_HISTORY);
l.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
l.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK);
finish();
startActivity(l);
在活动 B 的完成按钮上使用这个。
我正在开发一个应用程序,您可以在该应用程序上共享本地 phone 的图库应用程序中的图像。每当通过图库应用分享照片时,Activity
A
都会在我的应用中打开。
照片共享遵循从 Activity A
到 Activity B
的一些步骤,B
的最后一步打开 Main Activity
。
如我所愿,从 B
向后按应该可以打开 A
。按 B
中的最后一个按钮应该从后台清除 A
和 B
,这样如果你按回 Main Activity
,应用程序应该关闭。
我做了什么:
最初,我是用这个标志
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
打开Main Activity
但是,这开始了一个新任务,所以即使我过去关闭我的应用程序并转到 phone 的图库应用程序,它也会显示A
而不是该应用程序上的照片,当你按下返回,然后您可以在该图库应用程序中看到实际图像。我已经为
A
和B
指定了android:noHistory="true"
并且在没有新任务标志的情况下开始Main Activity
的意图。这解决了新任务问题,因为当我关闭我的应用程序并切换回图库应用程序时,它显示的是实际图像而不是我的 activityA
。但这里的问题是,我无法从B
返回到A
,而且如果应用程序被最小化,那么 activity 也会消失。
创建单例class :
Stack<Activity> stack;
public void add(Activity activity){
stack.add(activity).
}
public void remove(){
Activity activity = stack.lastElement();
if(activity != null) {
stack.remove(activity).
activity.finish();
}
}
public void removeAll() {
for (Activity activity : stack) {
if (activity != null)
activity.finish();
}
stack.clear();
}
在活动的 onCreate() 中调用 add()
调用删除将完成当前 activity
调用 removeAll 将完成添加到堆栈中的所有活动
Intent l = new Intent(getApplicationContext(), MainActivity.class);
l.addFlags(Intent.FLAG_ACTIVITY_NO_HISTORY);
l.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
l.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK);
finish();
startActivity(l);
在活动 B 的完成按钮上使用这个。