安卓开发:活动的最佳实践2--随时随地退出程序

如果用户点击了多个界面,进入多个不同的Activity,你会发现当前想退出程序是非常不方便的,需要连续按多次Back键才行。按Home键只是把程序挂起,并没有退出程序。其实这个问题就足以引起你的思考,如果我们的程序需要一个注销或者退出的功能该怎么办?必须要有一个随时随地都能退出程序的方案才行。

其实解决思路很简单,只需要用一个专门的集合类对所有的活动进行管理就可以了。

新建一个ActivityCollector类作为活动管理器,代码如下所示:

public class ActivityCollector {
    public 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 (!activity.isFinishing()) {
                activity.finish();
            }
        }
    }
}

在活动管理器中,我们通过一个List来暂存活动,然后提供了一个addActivity()方法用于添加一个活动,提供了一个removeActivity()方法用于从List中移除活动,最后提供一个finishAll()方法用于将List中存储的活动全部都销毁。

接下来修改BaseActivity中的代码,如下所示:

public class BaseActivity extends Activity {

    private final String TAG = "BaseActivity";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        Log.d(TAG, getClass().getSimpleName());     //打印活动类名
        ActivityCollector.addActivity(this);        //添加活动到活动管理器
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        ActivityCollector.removeActivity(this);     //从活动管理器移除活动
    }

}

在BaseActivity的onCreate()方法中调用了ActivityCollector的addActivity()方法,表明将当前正在创建的活动添加到活动管理器。然后再BaseActivity中重写onDestory()方法,并调用了ActivityCollector的removeActivity()方法,表明将一个马上要销毁的活动从活动管理器里移除。

从此以后,不管你想在什么地方退出程序,只需要调用ActivityCollector.finishAll()方法就可以了。例如在ThirdActivity界面想通过点击按钮直接退出程序,只需要将代码改成如下所示:

public class ThirdActivity extends BaseActivity{

    private Button btn_quit;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.third_layout);
        btn_quit = (Button) findViewById(R.id.btn_quit);
        btn_quit.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                ActivityCollector.finishAll();  //从活动管理器移除所有活动
            }
        });
    }

}

当然你还可以在销毁所有活动后面再加上杀掉当前进程的代码,以保证程序完全退出。

注:该文章采摘自《第一行代码》

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值