1. 程式人生 > >Android實現退出整個應用程式程式碼;

Android實現退出整個應用程式程式碼;

工作上需要實現雙擊退出應用程式的效果,在網上看到有什麼System.exit(0);,執行下來,然而這並不能實現退出應用程式,而只是退出當前activity;和finish效果差不多;

後來有一種思路就是,每開啟一個activity,就把當前activity儲存在一個List當中,若需要退出整個應用,就是將集合clear一下就可以實現;

public class MyApplication extends Application {
    
    private static Stack<Activity> activityStack;
    private static MyApplication singleton;
    @Override
    
public void onCreate() { super.onCreate(); singleton=this; } // Returns the application instance public static MyApplication getInstance() { return singleton; } /** * add Activity 新增Activity到棧 */ public void addActivity(Activity activity){
if(activityStack ==null){ activityStack =new Stack<Activity>(); } activityStack.add(activity); } /** * get current Activity 獲取當前Activity(棧中最後一個壓入的) */ public Activity currentActivity() { Activity activity = activityStack.lastElement();
return activity; } /** * 結束當前Activity(棧中最後一個壓入的) */ public void finishActivity() { Activity activity = activityStack.lastElement(); finishActivity(activity); } /** * 結束指定的Activity */ public void finishActivity(Activity activity) { if (activity != null) { activityStack.remove(activity); activity.finish(); activity = null; } } /** * 結束指定類名的Activity */ public void finishActivity(Class<?> cls) { for (Activity activity : activityStack) { if (activity.getClass().equals(cls)) { finishActivity(activity); } } } /** * 結束所有Activity */ public void finishAllActivity() { for (int i = 0, size = activityStack.size(); i < size; i++) { if (null != activityStack.get(i)) { activityStack.get(i).finish(); } } activityStack.clear(); } /** * 退出應用程式 */ public void AppExit() { try { finishAllActivity(); } catch (Exception e) { } } }
然後建立一個baseActivity,在oncreate方法中呼叫
    MyApplication.getInstance().addActivity(this);
在onDestroy方法中呼叫
MyApplication.getInstance().finishActivity(this);
最後寫一個雙擊退出程式的方法;
	/**
 * 重複按下返回鍵退出app方法
 */
public  void exitBy2Click() {
Timer tExit = null;
if (isExit == false) {
isExit = true; // 準備退出
String doubleClick = (String) getString(R.string.double_click_back);
Toast.makeText(this, doubleClick, Toast.LENGTH_SHORT).show();
tExit = new Timer();
tExit.schedule(new TimerTask() {
@Override
public void run() {
isExit = false; // 取消退出
}
}, 2000); //如果2秒鐘內沒有按下返回鍵,則啟動定時器取消掉剛才執行的任務

} else {
GosApplication.getInstance().AppExit();
}
}