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 ,公众号[非著名程序员]多是东半球最好的技术分享公众号。天天,每周定时推送一些有关移动开发的原创文章和教程。
相关文章
相关标签/搜索