实现随时随地一键退出所有Activity

实现随时随地一键退出所有Activity

现在很多应用都拥有很多界面,然而页面加载多了,退出是一个很头疼的问题启动了多少次界面就需要按多少次返回键,非常的不方便。按Home键虽然把程序挂起了,但是并没有退出程序。相信这个问题早就引起你的注意,现在很多程序都有一键退出、注销的功能该怎么实现呢?所以要有一个随时随地都能够退出的方案才行。

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

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

import java.util.ArrayList;
import java.util.List;

import android.app.Activity;

/**
 * @author YLBF
 * 
 * @category 类说明 Activity集合
 * @version 修改时间 2015年3月5日下午4:04:05
 * @version 版本号 1.0.0.0
 */
public class ActivityCollector {
    public static List<Activity> activities = new ArrayList<Activity>();

    /**
     * 添加Activity
     * 
     * @param activity
     */
    public static void addActivity(Activity activity) {
        activities.add(activity);
    }

    /**
     * 移除Activity
     * 
     * @param activity
     */
    public static void removeActivity(Activity activity) {
        activities.remove(activity);
    }

    /**
     * 移除所有Activity
     * 
     * @param activity
     */
    public static void finishAllActivity() {
        for (Activity activity : activities) {
            if (!activity.isFinishing()) {
                activity.finish();
            }
        }
    }
} 

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

接下来建立BaseActivity类,代码如下所示:

import android.app.Activity;
import android.os.Bundle;
import android.util.Log;

/**
 * @author YLBF
 * 
 * @category 类说明 Activity基类 以后所有的Activity都继承此类
 * @version 修改时间 2015年3月5日下午4:20:31
 * @version 版本号 1.0.0.0
 */
public class BaseActivity extends Activity {
    public static 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);
    }

    /**
     * 显示短消息提示
     * @param pMsg 提示消息内容
     */
    protected void showShortToast(String pMsg) {
        Toast.makeText(this, pMsg, Toast.LENGTH_SHORT).show();
    }
}

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

从此以后,不管你想在什么地方退出程序,只要调用ActivityCollector的finishAllActivity()方法就可以了。比如想要点击返回键两次直接退出程序,只需要按照如下的方法来处理就可以了。代码如下所示:

private boolean finishFlag = true;
    private long oldTime;

    @Override
    public void onBackPressed() {
        if (finishFlag) {
            finishFlag = !finishFlag;
            showShortToast("再按一次退出程序!");
            oldTime = System.currentTimeMillis() / 1000;
        } else {
            finishFlag = !finishFlag;
            long newTime = System.currentTimeMillis() / 1000;
            if ((newTime - oldTime) < 2) {
                ActivityCollector.finishAllActivity();
                // 强制杀死当前进程
                //android.os.Process.killProcess(android.os.Process.myPid());
            }
        }
    }

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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值