我目前正在開發的android應用程序崩潰(修復了),由於應該引發IndexOutOfBoundsException。我從可變參數參數(即String ...)中訪問擴展AyncTask的類的doInBackground方法中的字符串。我偶然訪問了一個元素變量參數字符串的索引1(不是0)(輕度尷尬......)。當應用程序第一次崩潰時,我查看了我的logcat(並且多次再次確認我沒有發瘋),並且沒有找到RuntimeException的堆棧跟蹤。我經常碰碰我的手機,並且總是有一個很好的小堆棧跟蹤讓我查看和修復,但是我對此感到困惑。這裏是我的logcat的有關章節(不含堆棧跟蹤一個RuntimeException),下面的代碼是造成飛機墜毀前行右調試聲明:爲什麼android logcat不顯示運行時異常的堆棧跟蹤?
W/dalvikvm(25643): threadid=11: thread exiting with uncaught exception (group=0x40c281f8)
D/dalvikvm(25643): GC_CONCURRENT freed 1249K, 25% free 12433K/16455K, paused 2ms+6ms
W/dalvikvm(25643): threadid=15: thread exiting with uncaught exception (group=0x40c281f8)
I/Process (25643): Sending signal. PID: 25643 SIG: 9
I/ActivityManager(5905): Process com.trade.nav.ges (pid 25643) has died.
W/ActivityManager(5905): Force removing r: app died, no saved state
I/WindowManager(5905): WIN DEATH: win
I/WindowManager(5905): WIN DEATH: win
I/SurfaceFlinger(1746): id=3848 Removed idx=2 Map Size=4
I/SurfaceFlinger(1746): id=3848 Removed idx=-2 Map Size=4
I/WindowManager(5905): WIN DEATH: win
I/power (5905): *** acquire_dvfs_lock : lockType : 1 freq : 1000000
D/PowerManagerService(5905): acquireDVFSLockLocked : type : DVFS_MIN_LIMIT frequency : 1000000 uid : 1000 pid : 5905 tag : ActivityManager
W/ActivityManager(5905): mDVFSLock.acquire()
而在此之後,另一項活動開始。 作爲參考,這裏是導致崩潰的代碼:
private class LoadImage extends AsyncTask<String, Integer, Bitmap> {
String url = "";
//...
public LoadImage(ImageView iv, Context c) {
//...
}
protected Bitmap doInBackground(String... urls) {
// urls has one element
url = urls[1];
//...
}
//...
}
任何深入瞭解正在發生的事情會請我很大,因爲我很好奇有在互聯網上像這樣的從來沒有見過。 謝謝。
編輯:我沒有過濾器設置
你試過把異常代碼放在Try Catch Block中嗎? –
你確定你沒有選擇任何過濾器? – Varun
...問題不是我需要防止代碼引發運行時異常,我已經在另一個版本的代碼中做了這些(將數字1更改爲0)。問題在於舊版本的代碼從未導致運行時異常堆棧跟蹤顯示在我的logcat中。我想知道爲什麼會發生。 –