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()); }
然后一出bug你的邮箱和微信就来骚你了。
代码就不上了,大家有好的办法可以提供意见, 我总觉得应该有什么好的方式我错过了