Android 捕獲系統全域異常,android捕獲全域
Android系統的“程式異常退出”,給應用的使用者體驗造成不良影響。為了捕獲應用運行時異常並給出友好提示,便可繼承UncaughtExceptionHandler類來處理。通過Thread.setDefaultUncaughtExceptionHandler()方法將異常處理類設定到線程上即可。
1、異常處理類,代碼如下:
[java] view plaincopy
- public class CrashHandler implements UncaughtExceptionHandler {
- public static final String TAG = "CrashHandler";
- private static CrashHandler INSTANCE = new CrashHandler();
- private Context mContext;
- private Thread.UncaughtExceptionHandler mDefaultHandler;
-
- private CrashHandler() {
- }
-
- public static CrashHandler getInstance() {
- return INSTANCE;
- }
-
- public void init(Context ctx) {
- mContext = ctx;
- mDefaultHandler = Thread.getDefaultUncaughtExceptionHandler();
- Thread.setDefaultUncaughtExceptionHandler(this);
- }
-
- @Override
- public void uncaughtException(Thread thread, Throwable ex) {
- // if (!handleException(ex) && mDefaultHandler != null) {
- // mDefaultHandler.uncaughtException(thread, ex);
- // } else {
- // android.os.Process.killProcess(android.os.Process.myPid());
- // System.exit(10);
- // }
- System.out.println("uncaughtException");
-
- new Thread() {
- @Override
- public void run() {
- Looper.prepare();
- new AlertDialog.Builder(mContext).setTitle("提示").setCancelable(false)
- .setMessage("程式崩潰了...").setNeutralButton("我知道了", new OnClickListener() {
- @Override
- public void onClick(DialogInterface dialog, int which) {
- System.exit(0);
- }
- })
- .create().show();
- Looper.loop();
- }
- }.start();
- }
-
- /**
- * 自訂錯誤處理,收集錯誤資訊 發送錯誤報表等操作均在此完成. 開發人員可以根據自己的情況來自訂異常處理邏輯
- *
- * @param ex
- * @return true:如果處理了該異常資訊;否則返回false
- */
- private boolean handleException(Throwable ex) {
- if (ex == null) {
- return true;
- }
- // new Handler(Looper.getMainLooper()).post(new Runnable() {
- // @Override
- // public void run() {
- // new AlertDialog.Builder(mContext).setTitle("提示")
- // .setMessage("程式崩潰了...").setNeutralButton("我知道了", null)
- // .create().show();
- // }
- // });
-
- return true;
- }
- }
2、線程綁定異常處理類
[java] view plaincopy
- public class CrashHandlerActivity extends Activity {
- /** Called when the activity is first created. */
- @Override
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.main);
- CrashHandler crashHandler = CrashHandler.getInstance();
- crashHandler.init(this); //傳入參數必須為Activity,否則AlertDialog將不顯示。
- // 建立錯誤
- throw new NullPointerException();
- }
- }
Demo:http://code.google.com/p/android-custom-view/downloads/list
轉載地址: http://orgcent.com/android-uncaughtexceptionhandler-exception/ | 蘿蔔白菜的部落格
android 程式怎捕捉全域異常
Android系統的“程式異常退出”,給應用的使用者體驗造成不良影響。為了捕獲應用運行時異常並給出友好提示,便可繼承UncaughtExceptionHandler類來處理。通過Thread.setDefaultUncaughtExceptionHandler()方法將異常處理類設定到線程上即可。
1、異常處理類,代碼如下:
[java] view plaincopy
public class CrashHandler implements UncaughtExceptionHandler {
public static final String TAG = "CrashHandler";
private static CrashHandler INSTANCE = new CrashHandler();
private Context mContext;
private Thread.UncaughtExceptionHandler mDefaultHandler;
private CrashHandler() {
}
public static CrashHandler getInstance() {
return INSTANCE;
}
public void init(Context ctx) {
mContext = ctx;
mDefaultHandler = Thread.getDefaultUncaughtExceptionHandler();
Thread.setDefaultUncaughtExceptionHandler(this);
}
@Override
public void uncaughtException(Thread thread, Throwable ex) {
// if (!handleException(ex) && mDefaultHandler != null) {
// mDefaultHandler.uncaughtException(thread, ex);
// } else {
// android.os.Process.killProcess(android.os.Process.myPid());
// System.exit(10);
// }
System.out.println("uncaughtException");
new Thread() {
@Override
public void run() {
Looper.prepare();
new AlertDialog.Builder(mContext).setTitle("提示").setCancelable(false)
......餘下全文>>
android 實現ThreadUncaughtExceptionHandler介面捕獲全域異常 怎解析是哪一種異常?
問題補充:寫2個類A、B、一個介面C(名字自取) A類實現捕獲一種異常並且throws Exception{ if(arys.length > 4){ throw new Exception("Array