System.exit(0);
或者
Runtime.getRuntime().exit(0);
第二種方法:強制關閉與該包有關聯的一切執行
ActivityManager manager = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE);
manager.restartPackage(getPackageName());
使用這種方式關閉應用程序需要加上權限
第三種方式:拋出異常
原理:在程序遇到非檢查異常時,程序退被強制退出,那麼虛擬器也將會被關閉,
所以利用一個非檢查異常,退出程序,但會遇到一個問題,就是強制退出的對話框的出現,是不是很噁心?
其實沒有關係,可以不讓系統彈出對話框,看代碼 第四種方式:用一個集合自己管理activity
當一個activity創建的時候,把實例傳遞到那個管理activity的集合裏,這個集合一般放在一個可全局訪問的一個類內,
最好那個類繼承Application,然後在menifest的標籤的屬性name上加上自己寫的application類,這個類是單例的。
退出的時候,遍歷集合讓所有的activity finish掉,最後調用關閉進程的那個方法 ,加上
第六種方式:使用遍歷的方式
這種方式比較繁瑣複雜,使用遞歸的方式,沒當打開一個activity的時候都用startActivityForResult(),在onActivityResult()裏接收結果關閉當前的activity,不推薦使用,太繁瑣麻煩。
加上
第五種方式:使用intent的flag實現
原理:在android程序中,當打開一個activity的時候可以傳進去這樣一個flag: Activity.FLAG_ACTIVITY_CLEAR_TOP,
當打開那個新的activity的時候,任務棧裏的所有activity將會被清空,最後只剩下那個新的activity,然後在新的activity
裏使用finish()把自己銷燬了就可以了。加上
android 捕獲異常 CrashHandler
public class CrashHandler implements UncaughtExceptionHandler {
public static final boolean DEBUG = true;
private static CrashHandler INSTANCE;
private Context mContext;
ProgressDialog progressDialog;
Map map;
RemoteRequestTool reqTool;
private CrashHandler() {}
public static CrashHandler getInstance() {
if (INSTANCE == null) {
INSTANCE = new CrashHandler();
}
return INSTANCE;
}
public void init(Context ctx) {
mContext = ctx;
Thread.setDefaultUncaughtExceptionHandler(this);
}
@Override
public void uncaughtException(Thread thread, Throwable ex) {
Intent intent = new Intent();
intent.setClass(mContext, ExceptionCaughtActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
StackTraceElement[] stack = ex.getStackTrace();