Android 收集已發布程式的崩潰資訊

2021-06-16 14:27:41 字數 2430 閱讀 4257

我們寫程式的時候都希望能寫出乙個沒有任何bug的程式,期望在任何情況下都不會發生程式崩潰。不過理想是豐滿的,現實是骨感的。沒有乙個程式設計師能保證自己寫的程式絕對不會出現異常崩潰。特別是針對使用者數達到幾十萬幾百萬的程式,當你使用者數達到一定數量級後,就算你的程式出現個別異常崩潰情況也不用驚訝。

既然我們寫的程式都有可能發生異常崩潰,如果是還沒發布的程式,我們可以通過測試抓取log來分析。不過針對已經發布的程式,我們沒法重現現象,所以讓使用者反饋程式異常資訊就很重要。下面我們說說如何收集程式執行過程的異常資訊。

1、android異常捕獲介面

//當執行緒因未捕獲的異常而突然終止時,呼叫處理程式的介面static

inte***ce uncaughtexceptionhandler

2、設定執行緒捕獲異常

從上面的介面我們可以看到,這個介面是針對執行緒來說,也就是說我們如果需要監控某個執行緒運**況,只要把這個介面實現了,然後把監控方法設定到具體的執行緒裡面即可。一般來說,我們最需要監控的就是我們的ui執行緒也就是主線程。

//設定當執行緒由於未捕獲到異常而突然終止,並且沒有為該執行緒定義其他處理程式時所呼叫的預設處理程式。static

void

setdefaultuncaughtexceptionhandler(thread.uncaughtexceptionhandler eh)

3、uncaughtexceptionhandler 例項

//edited by mythou

//

public

class

mythoucrashhandler implements uncaughtexceptionhandler

//這個介面必須重寫,用來處理我們的異常資訊@override

public

void

uncaughtexception(thread thread, throwable ex)

defaultueh.uncaughtexception(thread, ex);

}//寫入log資訊的方法,寫入到sd卡裡面

private

void

writelog(string log, string name)

catch

(ioexception e) }}

上面就是實現了獲取處理跟蹤資訊的方法,上面的方法是參照vlc的異常處理機制編寫的。做了一些簡單修改。不過上面只是獲取了異常資訊,如果程式安裝到使用者機器上,我們沒法獲取到這些資訊,總不能讓使用者把機器拿過來給你,然後你把log拷貝出來吧。(這個我以前做嵌入式的時候到試過,讓客戶把機器拿過來,拷貝裡面的log,那時候做的機器無法聯網。現在想起來都糾結,o(∩_∩)o哈哈~) 為了不再糾結,

我們需要乙個可以把log傳送到我們伺服器的功能,下面是把乙個服務資訊傳送到我們指定伺服器功能。

3、通過網路傳送log

//edited by mythou

//

public

class sendcrashlog extends asynctask

@override

protected boolean doinbackground(string... params

)

catch

(clientprotocolexception e)

catch

(ioexception e)

log.d(tag,

"device model sent.");

return

true

; }

@override

protected

void

onpostexecute(boolean result)

}

//edited by mythou

//

sendcrashlogsendlog = new

sendcrashlog();//剛才的異常資訊字串sendlog .execute(stacktrace);

通過上面的方法就可以把異常資訊傳送到指定的伺服器,也就可以跟蹤客戶使用軟體的情況,方便我們修改程式的問題。當然這個資訊收集一般都隱私和後台流量問題,這個需要在程式裡面做點提示,免得背上流氓軟體的罵名。

edited by mythou

發布Android程式

因為最近經常用到這方面的東西,所以寫寫來,省的再用的時候乙個乙個字元的敲,麻煩。應用程式使用數字證書簽名。數字證書是乙個包含相關資訊 比如公司名稱,位址等資訊 的檔案。其中一些比較重要的特性如,簽名的公 私鑰。公 私鑰也成為金鑰對。這個金鑰對可以想ca申請,也可以使用jdk自帶的keytool生成,...

如何發布android應用程式

如何發布android應用程式 主要講的是應用程式數字簽名1 接下來,系統會提示你輸入apk檔案的儲存位址。這樣我們就編譯生成了發布版的未簽名的apk檔案.eg.sdialer.apk 2 完成了發布版的編譯,接下來是獲取私鑰,會用到jdk下的兩種工具 keytool和jarsigner.keyto...

Android之獲得已安裝程式列表

我們大家都知道在手機上我們可以檢視圖示來知道我們都安裝了什麼樣的應用,但實際上載android中我們可以獲得你安裝應用的各種資訊,雖然在我的應用程式中只需要獲得 我們首先,可以建立乙個用於存放應用程式資訊的類結構。我們必須寫這個,要不我們就不會看見你想要的資訊,那麼我們就來看看,如下 private...