一区二区三区日韩精品-日韩经典一区二区三区-五月激情综合丁香婷婷-欧美精品中文字幕专区

分享

Android應(yīng)用如何反饋Crash報告

 天海544 2014-11-18
    

為什么需要反饋Crash報告?

 

做Android應(yīng)用程序,要盡量避免程序Crash的發(fā)生。雖然說零Crash是程序員追逐的最終目標(biāo),但是現(xiàn)實的情況是,程序員只能盡量的減少Crash的發(fā)生,而幾乎不可能完全杜絕Crash。也許,你認(rèn)為你的應(yīng)用的健壯性已經(jīng)近乎完美,輕松的經(jīng)受住了測試部門魔鬼般的考驗,但是當(dāng)你的應(yīng)用發(fā)布到市場,面對百萬甚至千萬級別的用戶的時候,可能就沒有那么幸運了。

基于以上原因,一般的應(yīng)用程序,都要有一個Crash反饋的機制。程序員可以根據(jù)反饋的結(jié)果,對當(dāng)前的版本的代碼進行改進,使發(fā)布的下一個版本更加穩(wěn)定。

 

如何反饋?

 

先來看如何捕獲Crash的發(fā)生。

 

Java中有一個接口,UncaughtExceptionHandler,先看描述。

static interface

Thread.UncaughtExceptionHandler
          當(dāng) Thread 因未捕獲的異常而突然終止時,調(diào)用處理程序的接口。

 

再來看Thread類中的一個方法。

static void

setDefaultUncaughtExceptionHandler(Thread.UncaughtExceptionHandler eh)
          設(shè)置當(dāng)線程由于未捕獲到異常而突然終止,并且沒有為該線程定義其他處理程序時所調(diào)用的默認(rèn)處理程序。

 

看了這些API,就知道我們需要實現(xiàn)這樣一個接口,然后在程序的主線程中設(shè)置處理程序。

 

看下面的接口實現(xiàn)。

 

  1. package com.arui.framework.android.exception;  
  2.   
  3.    
  4.   
  5. import java.lang.Thread.UncaughtExceptionHandler;  
  6.   
  7. import android.content.Context;  
  8.   
  9.    
  10.   
  11. /** 
  12.  
  13.  * Default exception handler for all activities. 
  14.  
  15.  *  
  16.  
  17.  * @author http://blog.csdn.net/arui319 
  18.  
  19.  * @version 2011/12/01 
  20.  
  21.  *  
  22.  
  23.  */  
  24.   
  25. public class DefaultExceptionHandler implements UncaughtExceptionHandler {  
  26.   
  27.    
  28.   
  29.     private Context act = null;  
  30.   
  31.    
  32.   
  33.     public DefaultExceptionHandler(Context act) {  
  34.   
  35.        this.act = act;  
  36.   
  37.     }  
  38.   
  39.    
  40.   
  41.     @Override  
  42.   
  43.     public void uncaughtException(Thread thread, Throwable ex) {  
  44.   
  45.    
  46.   
  47.        // 收集異常信息 并且發(fā)送到服務(wù)器  
  48.   
  49.        sendCrashReport(ex);  
  50.   
  51.    
  52.   
  53.        // 等待半秒  
  54.   
  55.        try {  
  56.   
  57.            Thread.sleep(500);  
  58.   
  59.        } catch (InterruptedException e) {  
  60.   
  61.            //  
  62.   
  63.        }  
  64.   
  65.          
  66.   
  67.        // 處理異常  
  68.   
  69.        handleException();  
  70.   
  71.    
  72.   
  73.     }  
  74.   
  75.    
  76.   
  77.     private void sendCrashReport(Throwable ex) {  
  78.   
  79.    
  80.   
  81.        StringBuffer exceptionStr = new StringBuffer();  
  82.   
  83.        exceptionStr.append(ex.getMessage());  
  84.   
  85.    
  86.   
  87.        StackTraceElement[] elements = ex.getStackTrace();  
  88.   
  89.        for (int i = 0; i < elements.length; i++) {  
  90.   
  91.            exceptionStr.append(elements[i].toString());  
  92.   
  93.        }  
  94.   
  95.    
  96.   
  97.        //TODO   
  98.   
  99.        //發(fā)送收集到的Crash信息到服務(wù)器  
  100.   
  101.     }  
  102.   
  103.    
  104.   
  105.     private void handleException() {  
  106.   
  107.        //TODO   
  108.   
  109.        //這里可以對異常進行處理。  
  110.   
  111.        //比如提示用戶程序崩潰了。  
  112.   
  113.        //比如記錄重要的信息,嘗試恢復(fù)現(xiàn)場。  
  114.   
  115.        //或者干脆記錄重要的信息后,直接殺死程序。  
  116.   
  117.     }  
  118.   
  119.    
  120.   
  121. }  


 

 

在主Activity的onCreate(Bundle savedInstanceState)方法中增加如下代碼。

 

  1. Thread.setDefaultUncaughtExceptionHandler(new DefaultExceptionHandler(  
  2.   
  3.        this.getApplicationContext()));  


 

 

如何發(fā)送到服務(wù)器?

 

這個不同的項目組會有不同的方式,具體不在這里討論了。需要提醒的是,除了把異常的具體信息發(fā)送給服務(wù)器外,至少還需要發(fā)送版本信息,這樣程序員才可以判斷服務(wù)器上的異常信息是哪個版本出現(xiàn)的。除了版本信息,可能還需要手機的SDK版本,屏幕分辨率,手機型號等等信息,有了這些信息,可以更全面的了解異常信息。

 

更多說明。

 

只需要在主Activity中設(shè)置一次異常處理類即可,不需要在所有的Acitivity都進行設(shè)置。

 

個人感覺Crash發(fā)生后,恢復(fù)現(xiàn)場繼續(xù)運行的意義不大。Crash以后,程序的運行情況已經(jīng)是不可預(yù)知的了,用一個錯誤,去彌補另外一個錯誤,本身就會導(dǎo)致更多的錯誤。建議還是盡量避免Crash的發(fā)生更合理。

 

---------------------------------------------------------------------------

GL(arui319)

http://blog.csdn.net/arui319

<本文可以轉(zhuǎn)載,但是請保留以上作者信息。謝謝。>

---------------------------------------------------------------------------

 

 

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多

    亚洲视频偷拍福利来袭| 91麻豆精品欧美视频| 国产精品久久三级精品| 国产性色精品福利在线观看| 成人午夜视频精品一区| 青青操日老女人的穴穴| 中文字幕亚洲精品乱码加勒比 | 国产熟女一区二区精品视频| 国产伦精品一区二区三区高清版| 日本高清视频在线播放| 日韩和欧美的一区二区三区| 亚洲欧洲精品一区二区三区| 日本女优一色一伦一区二区三区| 欧美性猛交内射老熟妇| 污污黄黄的成年亚洲毛片| 好吊日成人免费视频公开| 伊人欧美一区二区三区| 成年女人下边潮喷毛片免费| 欧美韩国日本精品在线| 国产老熟女乱子人伦视频| 91亚洲国产日韩在线| 福利视频一区二区在线| 国产精品午夜福利在线观看| 国产原创中文av在线播放| 色哟哟哟在线观看视频| 色综合久久中文综合网| 国产亚洲精品久久久优势| 久久99午夜福利视频| 亚洲免费观看一区二区三区| 风韵人妻丰满熟妇老熟女av | 亚洲三级视频在线观看免费| 一个人的久久精彩视频| 欧美激情一区=区三区| 91爽人人爽人人插人人爽| 国产免费成人激情视频| 九九视频通过这里有精品| 日韩一区二区三区免费av| 日韩在线视频精品视频| 国产美女网红精品演绎| 东京不热免费观看日本| 九九热视频免费在线视频|