随时随地退出所有活动

假设我们有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:在某个活动中可以关闭所有活动
例如在活动D中有一个Button可以结束所有活动,定义它的id为button_finish
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() ;
            }
        }) ;
    }
}
可以看出,点击Button,就会调用finishAll( ),从而可以结束所有的活动,退出程序
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值