假设我们有4个活动A,B,C,D,然后由A启动B,由B启动C,由C启动D,那么目前,我们停在了D活动上;如果我们想要退出应用程序,那么我们要按4次Back键,显然十分麻烦,特别是活动很多的时候
所以,有没有一种方法可以一下子退出所有活动,即使我们在D活动?如果按下Home键,只是将应用程序挂起,并没有退出,这是不可行的。方法肯定是有的,比如我们使用QQ,就存在一个Exit菜单键,可以退出QQ
我们这里的思路是:用一个专门的集合类对所有的活动进行管理
Step 1:新建一个ActivityCollector的类作为活动管理器
public class ActivityCollector {
private static List<Activity> activities = new ArrayList<Activity> () ;
public static void addActivity (Activity activity) {
activities.add (activity) ;
}
public static void removeActivity (Activity activity) {
activities.remove (activity) ;
}
public static void finishAll () {
for (Activity activity : activities) {
if (!activities.isFinishing()) {
activity.finish() ;
}
}
}
}
不难看出,这个类用一个List来存放所有类,它的finishAll( )可以销毁所有活动,addActivity( )可以添加活动,removeActivity( )可以删除其中一个活动
Step 2:在所有活动的父类中使用ActivityCollector
上一篇有写到使用一个BaseActivity来作为所有活动的父类,所以这里我们在BaseActivity中使用ActivityCollector,这样所有活动(都继承自BaseActivity)都可以被ActivityCollector所管理
public class BaseActivity extends Activity {
@Override
protected static void onCreate (Bundle savedInstanceState) {
super.onCreate (savedInstanceState) ;
Log.d ("BaseActivity" , getClass().getSimpleName()) ;
ActivityCollector.addActivity (this) ;
}
@Override
protected void onDestroy () {
super.onDestroy () ;
ActivityCollector.remove (this) ;
}
}
由于所有活动都继承自BaseActivity,所有每个活动创建或者销毁,都会被ActivityCollector所管理,由以下两个代码可以体现:
ActivityCollector.addActivity (this) ;
ActivityCollector.removeActivity (this) ;
Step 3:在某个活动中可以关闭所有活动
public DActivity extends BaseActivity {
@Override
protected void onCreate (Bundle savedInstanceState) {
……
Button button = (Button) findViewById (R.id.button_finish) ;
button.setOnClickListener (new OnClickListener () {
@Override
public void onClick (View v) {
ActivityCollector.finishAll() ;
}
}) ;
}
}