android怎样实时上传崩溃日志到服务器

由于公司想实时的收集应用的bug错误信息。然后把bug信息上传到服务器,再推送到开发人员的邮箱和微信,好及时响应解决方案。看到网上很多是保存错误信息为TXT文件然后再次启动的时候进行上传,但是这样的话,同步性就差了 。

然后开始进行操作:

1,实现Thread.UncaughtExceptionHandler方法,然后在uncaughtException方法中把崩溃日志上传到服务器。当时在模拟器里面运行挺好的,但是到真机的时候就不行了。为什么因为真机不会等你上传log到服务器就把进程杀死了。失败,还是经验不足啊。

2,既然上面方法不行,那就开始在崩溃的时候开启一个新的服务进行上传崩溃日志操作,并且让这个服务在一个新进程中进行运行(这样不容易被杀死)。拦截系统处理崩溃日志,然后重启app。这样是可以把崩溃日志上传到服务器,但是老大说app崩溃了,不能进行自启,要让系统进行处理,好吧(mmp)。

3,那就只有来第三种了,让系统处理崩溃,然后把错误日志上传到服务器然后再停止服务,但是万一上传到服务器的接口超时怎么办(不是有超时设置吗??)还有就是app崩溃了,app还有一个空进程在运行。

4,然后无解只有上折中办法了,让系统处理崩溃,然后把错误日志上传到服务器并且服务只能运行2秒钟,如果2秒钟错误日志没有上传到服务器,那么这个错误信息就不要了。然后再停止服务,在服务销毁的时候同时销毁进程。

核心代码:

public int onStartCommand(Intent intent, int flags, int startId) {
    stopDelayed = intent.getLongExtra("Delayed", 2000);
    PackageName = intent.getStringExtra("PackageName");
    expection = intent.getStringExtra("exception");
    try {
            //这里上传崩溃日志
    } catch (java.lang.Exception e) {
        e.printStackTrace();
    }
    handler.postDelayed(new Runnable() {
        @Override
        public void run() {
/*            Intent LaunchIntent = getPackageManager().getLaunchIntentForPackage(PackageName);
            startActivity(LaunchIntent);*/
            KillSelfService.this.stopSelf();
            //android.os.Process.killProcess(android.os.Process.myPid());
        }
    }, stopDelayed);

    return super.onStartCommand(intent, flags, startId);
}
@Override
public void onDestroy() {
    super.onDestroy();
    Log.i(TAG, "onDestroy: ");
    android.os.Process.killProcess(android.os.Process.myPid());
}


android怎样实时上传崩溃日志到服务器_第1张图片

然后一出bug你的邮箱和微信就来骚你了。

代码就不上了,大家有好的办法可以提供意见, 我总觉得应该有什么好的方式我错过了

你可能感兴趣的:(android怎样实时上传崩溃日志到服务器)