package com.jecelyin.editor; //import java.lang.Thread.UncaughtExceptionHandler; import java.lang.ref.WeakReference; import java.util.ArrayList; import java.util.Iterator; import com.jecelyin.util.JecLog; import android.app.Activity; import android.app.Application; public class JecApp extends Application { //private static UncaughtExceptionHandler mDefaultHandler; private static volatile boolean mCrashing = false; private final static ArrayList<WeakReference<Activity>> activitys = new ArrayList<WeakReference<Activity>>(); @Override public void onCreate() { super.onCreate(); JecLog.init(this); //mDefaultHandler = Thread.getDefaultUncaughtExceptionHandler(); // 捕捉未知异常 Thread.setDefaultUncaughtExceptionHandler(new UncaughtHandler()); EditorSettings.initialize(this); } public static void addActivity(Activity context) { JecLog.d("addActivity="+context); activitys.add(new WeakReference<Activity>(context)); } public static void removeActivity(Activity context) { JecLog.d("removeActivity="+context); activitys.remove(new WeakReference<Activity>(context)); } private static void closeAllActivitys() { Iterator<WeakReference<Activity>> iter = activitys.iterator(); while (iter.hasNext()) { Activity activity = (Activity)((WeakReference<Activity>)iter.next()).get(); if ((activity != null) && (!activity.isFinishing())) activity.finish(); } } private static class UncaughtHandler implements Thread.UncaughtExceptionHandler { @Override public void uncaughtException(Thread thread, Throwable ex) { if (mCrashing) return; mCrashing = true; closeAllActivitys(); JecLog.e("UnknowException for " + ex.getClass().getName(), ex); //mDefaultHandler.uncaughtException(thread, ex); //Process.killProcess(Process.myPid()); //System.exit(10); } } }