禁止app上传文件到服务器,Android将应用程序的崩溃信息如何保存到本地文件,并上传至服务器...

导语:最近实在是太忙了,没有怎么更新公众号,也没有怎么认真去写一些内容,在这里先给关注我的朋友说一声抱歉,可能在接下来的一段时间,还是很忙,但是我会争取抽空多分享一下技术文章,给大家看,共同进步,也希望有能力的人可以一起出来分享。

我们在做应用开发的时候,需要程序的崩溃信息,来进行bug的修复和版本的更新,每一个应用程序都会有bug,所以都需要在后台纪录这些bug日志,然后上传到服务器,让程序员看,并进行修复。现在也有很多第三方的jar包能实现这种功能,比如友盟统计等,但是终究不如自己写的方便。好了,废话不多说了,现在正是开讲。

第一步:先了解一下两个类Application和UncaughtExceptionHandler

Application:用来管理应用程序的全局状态。在应用程序启动时Application会首先创建,然后才会根据情况来启动相应的Activity和Service。对于未捕获异常的处理器我们也可以在这里实现。

UncaughtExceptionHandler:线程未捕获异常处理器,用来处理未捕获异常。如果程序出现了未捕获异常,默认会弹出系统中强制关闭对话框。我们需要实现此接口,并注册为程序中默认未捕获异常处理。这样当未捕获异常发生时,就可以做一些个性化的异常处理操作。

第二步:线程未捕获异常接口的实现

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,而我们自己定义的则需要自己去手动把默认的给替换掉。

android:icon="@drawable/ic_launcher"

android:label="@string/app_name"

android:theme="@style/AppTheme" >

...

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值