Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> Android 捕獲系統全局異常

Android 捕獲系統全局異常

編輯:關於Android編程

Android系統的“程序異常退出”,給應用的用戶體驗造成不良影響。為了捕獲應用運行時異常並給出友好提示,便可繼承UncaughtExceptionHandler類來處理。通過Thread.setDefaultUncaughtExceptionHandler()方法將異常處理類設置到線程上即可。

1、異常處理類,代碼如下:

 

[java]  
  1. public class CrashHandler implements UncaughtExceptionHandler {
  2. public static final String TAG = CrashHandler;
  3. private static CrashHandler INSTANCE = new CrashHandler();
  4. private Context mContext;
  5. private Thread.UncaughtExceptionHandler mDefaultHandler;
  6.  
  7. private CrashHandler() {
  8. }
  9.  
  10. public static CrashHandler getInstance() {
  11. return INSTANCE;
  12. }
  13.  
  14. public void init(Context ctx) {
  15. mContext = ctx;
  16. mDefaultHandler = Thread.getDefaultUncaughtExceptionHandler();
  17. Thread.setDefaultUncaughtExceptionHandler(this);
  18. }
  19.  
  20. @Override
  21. public void uncaughtException(Thread thread, Throwable ex) {
  22. // if (!handleException(ex) && mDefaultHandler != null) {
  23. // mDefaultHandler.uncaughtException(thread, ex);
  24. // } else {
  25. // android.os.Process.killProcess(android.os.Process.myPid());
  26. // System.exit(10);
  27. // }
  28. System.out.println(uncaughtException);
  29.  
  30. new Thread() {
  31. @Override
  32. public void run() {
  33. Looper.prepare();
  34. new AlertDialog.Builder(mContext).setTitle(提示).setCancelable(false)
  35. .setMessage(程序崩潰了...).setNeutralButton(我知道了, new OnClickListener() {
  36. @Override
  37. public void onClick(DialogInterface dialog, int which) {
  38. System.exit(0);
  39. }
  40. })
  41. .create().show();
  42. Looper.loop();
  43. }
  44. }.start();
  45. }
  46.  
  47. /**
  48. * 自定義錯誤處理,收集錯誤信息 發送錯誤報告等操作均在此完成. 開發者可以根據自己的情況來自定義異常處理邏輯
  49. *
  50. * @param ex
  51. * @return true:如果處理了該異常信息;否則返回false
  52. */
  53. private boolean handleException(Throwable ex) {
  54. if (ex == null) {
  55. return true;
  56. }
  57. // new Handler(Looper.getMainLooper()).post(new Runnable() {
  58. // @Override
  59. // public void run() {
  60. // new AlertDialog.Builder(mContext).setTitle(提示)
  61. // .setMessage(程序崩潰了...).setNeutralButton(我知道了, null)
  62. // .create().show();
  63. // }
  64. // });
  65.  
  66. return true;
  67. }
  68. }
    2、線程綁定異常處理類

     

     

    [java] 
    1. public class CrashHandlerActivity extends Activity {
    2. /** Called when the activity is first created. */
    3. @Override
    4. public void onCreate(Bundle savedInstanceState) {
    5. super.onCreate(savedInstanceState);
    6. setContentView(R.layout.main);
    7. CrashHandler crashHandler = CrashHandler.getInstance();
    8. crashHandler.init(this); //傳入參數必須為Activity,否則AlertDialog將不顯示。
    9. // 創建錯誤
    10. throw new NullPointerException();
    11. }
    12. }
       
  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved