Android將應用程序的崩潰信息如何保存到本地文件,並上傳服務器

導語:最近實在是太忙了,沒有怎麼更新公衆號,也沒有怎麼認真去寫一些內容,在這裏先給關注個人朋友說一聲抱歉,可能在接下來的一段時間,仍是很忙,可是我會爭取抽空多分享一下技術文章,給你們看,共同進步,也但願有能力的人能夠一塊兒出來分享。

咱們在作應用開發的時候,須要程序的崩潰信息,來進行bug的修復和版本的更新,每個應用程序都會有bug,因此都須要在後臺紀錄這些bug日誌,而後上傳到服務器,讓程序員看,並進行修復。如今也有不少第三方的jar包能實現這種功能,好比友盟統計等,可是終究不如本身寫的方便。好了,廢話很少說了,如今正是開講。

第一步:先了解一下兩個類Application和UncaughtExceptionHandler

Application:用來管理應用程序的全局狀態。在應用程序啓動時Application會首先建立,而後纔會根據狀況來啓動相應的Activity和Service。對於未捕獲異常的處理器咱們也能夠在這裏實現。

UncaughtExceptionHandler:線程未捕獲異常處理器,用來處理未捕獲異常。若是程序出現了未捕獲異常,默認會彈出系統中強制關閉對話框。咱們須要實現此接口,並註冊爲程序中默認未捕獲異常處理。這樣當未捕獲異常發生時,就能夠作一些個性化的異常處理操做。

第二步:線程未捕獲異常接口的實現html

import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.PrintStream;
import java.lang.Thread.UncaughtExceptionHandler;
 
public class CrashHandler implements UncaughtExceptionHandler{
 
    private static CrashHandler crashHandler;
     
    @Override
    public void uncaughtException(Thread thread, Throwable ex) {
        // TODO Auto-generated method stub
        if (crashHandler != null) {
            try {
                //將crash log寫入文件
                FileOutputStream fileOutputStream = new FileOutputStream("/mnt/sdcard/crash_log.txt", true);
                PrintStream printStream = new PrintStream(fileOutputStream);
                ex.printStackTrace(printStream);
                printStream.flush();
                printStream.close();
                fileOutputStream.close();
            } catch (FileNotFoundException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
    } 
     
    //設置默認處理器
    public void init() {
        Thread.setDefaultUncaughtExceptionHandler(this);
    }
     
    private CrashHandler() {}
     
    //單例
    public static CrashHandler instance() {
        if (crashHandler == null) {
            synchronized (crashHandler) {
                crashHandler = new CrashHandler();
            }
        }
        return crashHandler;
    }
}
第三步:在application中調用異常的捕獲功能

import android.app.Application;  
  
public class MainApplication extends Application {  
    @Override  
    public void onCreate() {  
        super.onCreate();  
        CrashHandler crashHandler = CrashHandler.getInstance();  
        crashHandler.init(this);  
    }  
}  
第四步:application在清單文件中的註冊
application和activity同樣都須要在清單文件中進行註冊,只不過咱們在建項目的時候,開發工具會在項目中自動註冊application,而咱們本身定義的則須要本身去手動把默認的給替換掉。

<application android:name=".MainApplication"  
       android:icon="@drawable/ic_launcher"  
       android:label="@string/app_name"  
       android:theme="@style/AppTheme" >  
  ...  
</application>  
講到這裏就介紹完了,若是你把這些代碼插入進去了,等你程序再崩潰的時候,就會給你自動記錄了,固然上面講的這些只是給你記錄到本地,並存放成文件了,若是想上傳到服務器,還請同窗們本身動手,把文件進行上傳吧!上傳文件到服務器我想同窗們應該都會吧!

說實話,寫一篇文章真的有時候比較耗費精力,若是同窗們不嫌棄或者感受對本身有用,還請你們隨手可以轉發到朋友圈,讓更多本身的朋友受益,也讓更多的人來關注,給我寫文章的動力。

微信公衆號:smart_android ,公衆號[非著名程序員]多是東半球最好的技術分享公衆號。天天,每週定時推送一些有關移動開發的原創文章和教程。
相關文章
相關標籤/搜索