這個BUG是一個很奇怪的問題,調用系統相機拍照(在別人的手機上還有美顏相機,美顏相機很容易出這個問題,系統相機不太容易出)
第一次遇到這種特別奇葩的問題,完全跟蹤不到,無論如何都沒有任何錯誤輸出,沒有任何提示無征兆的閃退。
具體就是傳入一個指定文件作為拍照文件。如下:
Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
if (picturesUploadAndEditView != null){
picturesUploadAndEditView.dissmissDialog();
}
tempPhotoPath = getTempImage();
if (tempPhotoPath == null || tempPhotoPath.trim().equals("")){
Toast.makeText(MyApplication.getInstance(), getResources().getString(R.string.sd_error), Toast.LENGTH_LONG);
return;
}
File tempFile = new File(tempPhotoPath);
Uri imageUri = Uri.fromFile(tempFile);
intent.putExtra(MediaStore.EXTRA_OUTPUT, imageUri);
startActivityForResult(intent, ACTION_TAKE_PHOTO);
getTempImage()是一個自動生成照片保存路徑的方法。
但是拍照完畢後 大概有20%左右幾率,程序會直接閃退。經過調試發現是tempPhotoPath變成了null.加了try catch捕獲異常並加Toash提示卻無效,Toash根本不出程序就直接閃退了。後來我甚至把整個onActivityResult都加try裡面了,但是還可能閃退,奇怪的是,閃退沒有任何的錯誤輸出,後來我在代碼裡逐行加調試輸出跟蹤,發現只要執行了return,就沒有然後了,執行完了,程序不是回到原來的地方而是閃退出去,沒報錯信息。後來加了UncaughtExceptionHandler試圖捕獲錯誤輸錯卻根本沒進入到那裡面去。求解,徹底沒有任何思路了。
測試了半天,經過查找資料終於發現問題。
在調用相機過後,拍照時候可能原來的應用已經被回收了。尤其是同事用美顏相機測試,可能占用內存過大,直接kill掉了。
我發現在這種情況下,返回原activity的onActivityResult,返回數據都正常的,照片也確實拍到了找得到,只是原來activity內的成員變量都沒了,或者說,整個application貌似都銷毀了,所有數據都沒了。
所以看似好像就是程序徹底閃退一樣。其實並沒有發生異常,只是APP都沒了還玩個毛線啊。