您的位置:首页 > 移动开发 > Android开发

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

2018-01-17 17:42 253 查看
由于公司想实时的收集应用的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()
4000
{
/*            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());
}




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

代码就不上了,大家有好的办法可以提供意见, 我总觉得应该有什么好的方式我错过了
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: