面试的时候多次被问到一次退出多个Activity的方法,其实方法是有多种的,其实主要考对Android机制的理解和运用。我参考各们网友的东西加上自己的思考,觉得有下面几种方法:
1.使用链表把要退出的Activity实例保存起来,在要退出时,遍例这个链表,调用每个Activity的finish方法。具体点讲:
在每个Activity的onCreate方法中添加类似代码:SysApplication.getInstance().addActivity(this);在需要退出程序的时候,调用:SysApplication.getInstance().exit();简而言之,通过单例模式把每个Activity 的引用添加到一个全局链表中,每次退出程序调用System.exit(0)时,先调用链表中Activity 的finish方法.
2.可以使用广播,每个Activity中收到这个广播,自己把自己finish掉。
3.可以在要退出Activity的onStart方法中加入以下code:
MyApplication mApp = (MyApplication)getApplication();
mApp.setExit(true);
finish();
4.假如Activity的启动顺序是:A->B->C->D,我们想在D中把所有的Acitivity都清理掉,那么做法是:
A的Manifest.xml配置成android:launchMode="singleTop" ,D窗口打开A窗口的Intent加入标识Intent.FLAG_ACTIVITY_CLEAR_TOP,这样会把栈中B
C,D都清除掉,同时因为A是的启动模式是singleTop,不会调用onCreate,而是调用onNewIntent,这时判断intent的值,如果为Intent.FLAG_ACTIVITY_CLEAR_TOP,则把A finish掉,这样A,B,C,D都finish掉了。
5.还是Activity的启动顺序是:A->B->C->D,可以把A的起动模式设成singleTask,从D起动A,会把栈中位于他之上的Activity都kill掉,然后在A的onNewIntent中把A finish掉。
上面是几种方法,应该都可以,具体的应用就要看场景了。