假设有这样一个场景:首页》AActivity 》BActivity 》CActivity 》DActivity 》首页。
如何把这过程中的Activity关闭呢?我现在想到两个方法。
方法1(推荐):
在DActivity使用如下代码返回首页:
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
Intent.FLAG_ACTIVITY_CLEAR_TOP会把首页上面的所有Activity全部清除掉,把要打开的Activity置于栈顶。
Intent intent = new Intent(DActivity.this,MainActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);
方法2:
在Application类里用列表记录打开过的activity:
public class MyApplication extends Application {
/**
* 己打开的activity集合
*/
private static List<Activity> activities = new ArrayList<Activity>();
public static void setActivities(Activity activity) {
if(activities != null){
activities.add(activity);
}
}
/**
* 释放界面
*/
public static void finishActivities() {
for (Activity activity : activities) {
if (activity != null) {
activity.finish();
}
}
activities.clear();
}
/**
* 根据Activity来销毁
* @param activity
*/
public static void popActivity(Activity activity){
if(activity == null) return;
Activity act = null;
for(int i=0;i<activities.size(); i++){
act = activities.get(i);
if(act !=null && act == activity){
activity.finish();
activities.remove(act);
act.finish();
act = null;
return;
}
}
}
}
在DActivity返回首页时,把所有activity清除掉:
MyApplication.finishActivities();
Intent intent = new Intent(DActivity.this,MainActivity.class);
startActivity(intent);
demo