1. 程式人生 > >android怎樣實時上傳崩潰日誌到伺服器

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你的郵箱和微信就來騷你了。

程式碼就不上了,大家有好的辦法可以提供意見, 我總覺得應該有什麼好的方式我錯過了可憐