国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統(tǒng) > Android > 正文

Android應(yīng)用至如何反饋Crash報告的詳解

2020-02-21 17:34:22
字體:
供稿:網(wǎng)友

隨著移動互聯(lián)網(wǎng)的快速發(fā)展,Android應(yīng)用的用戶質(zhì)量標(biāo)準(zhǔn)也在不斷提高,由于Android應(yīng)用程序的開發(fā)周期較短,今天就讓武林技術(shù)頻道小編為你簡述Android應(yīng)用至如何反饋Crash報告的詳解。

為什么需要反饋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)前的版本的代碼進(jìn)行改進(jìn),使發(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)。

復(fù)制代碼 代碼如下:

package com.arui.framework.android.exception;
import java.lang.Thread.UncaughtExceptionHandler;
import android.content.Context;
/**

* Default exception handler for all activities.
*
* @author http://blog.csdn.net/arui319

* @version 2011/12/01
*
*/
public class DefaultExceptionHandler implements UncaughtExceptionHandler {
private Context act = null;
public DefaultExceptionHandler(Context act) {
this.act = act;
}
@Override
public void uncaughtException(Thread thread, Throwable ex) {

// 收集異常信息 并且發(fā)送到服務(wù)器

sendCrashReport(ex);

// 等待半秒

try {

Thread.sleep(500);

} catch (InterruptedException e) {

//
}
// 處理異常
handleException();
}
private void sendCrashReport(Throwable ex) {

StringBuffer exceptionStr = new StringBuffer();

exceptionStr.append(ex.getMessage());

StackTraceElement[] elements = ex.getStackTrace();

for (int i = 0; i < elements.length; i++) {

exceptionStr.append(elements[i].toString());
}

//TODO

//發(fā)送收集到的Crash信息到服務(wù)器

}
private void handleException() {

//TODO

//這里可以對異常進(jìn)行處理。

//比如提示用戶程序崩潰了。

//比如記錄重要的信息,嘗試恢復(fù)現(xiàn)場。

//或者干脆記錄重要的信息后,直接殺死程序。
}
}


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

復(fù)制代碼 代碼如下:


Thread.setDefaultUncaughtExceptionHandler(new DefaultExceptionHandler(

this.getApplicationContext()));


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

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

更多說明。

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

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

以上就是Android應(yīng)用至如何反饋Crash報告的詳解,更多內(nèi)容請繼續(xù)關(guān)注武林技術(shù)網(wǎng)的其它相關(guān)文章!

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 乌兰浩特市| 宕昌县| 天津市| 新营市| 巴彦淖尔市| 柯坪县| 万州区| 蒙阴县| 黄石市| 光山县| 小金县| 鄂托克旗| 建水县| 奉节县| 黄陵县| 宜兰县| 江口县| 菏泽市| 科尔| 监利县| 合阳县| 同德县| 奉化市| 台湾省| 南昌县| 礼泉县| 乡宁县| 万盛区| 双峰县| 盐边县| 厦门市| 蚌埠市| 屏南县| 洛隆县| 堆龙德庆县| 察雅县| 万山特区| 阿拉善右旗| 桃源县| 德江县| 淳化县|