我们知道,activity在启动后会被保存至任务栈,在数据结构中,我们学过栈有先进后出的特性,我们每次新建一个activity,实际上就会进行一次压栈的操作,而每次我们按下手机中的back键,任务栈就会对activity执行一次出栈操作,这意味着我们每次只能退出一个activity,那么如果我们想从当前的activity处直接退出程序,应该怎么做呢?
首先我们需要一个集合来管理activity,在集合中对activity进行操作,用一个for each 结构实现循环迭代,关闭所有的activity。
public class ActivityCollection {
private static List<Activity> activityList = new ArrayList<>();
public static void addActivity(Activity activity) {
activityList.add(activity);
}
public static void removeActivity(Activity activity) {
activityList.remove(activity);
}
public static void removeAll()
{
for (Activity activity :activityList)
{
if (!activity.isFinishing())
{
activity.finish();
}
}
}
}
然后,我们写一个BaseActivity继承Activity,把activity在创建时加入到集合中,在销毁时从集合中删除。
public class BaseActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
ActivityCollection.addActivity(this);
}
@Override
protected void onDestroy() {
super.onDestroy();
ActivityCollection.removeActivity(this);
}
}
这样,我们就可以统一管理我们的Activity,只要让我们的每一个activity继承BaseActivity,在需要退出程序时,执行removeAll方法,我们就可以直接退出程序了。
<pre style="font-family: 宋体; font-size: 9pt; background-color: rgb(255, 255, 255);">