实现随时随地一键退出所有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());
}
}
}
当然还可以在销毁所有活动的代码后面再加上杀掉当前进程的代码,以保证该程序完全退出。
出处http://blog.csdn.net/javaswb/article/details/44083967