程式異常終止但沒有任何異常資訊,只捕獲到Log裡面下面的有用資訊:
09-19 21:57:02.222: W/InputDispatcher(153): channel '410c5958 com.nju.ecg/com.nju.ecg.wave.WaveScreen (server)' ~ Consumer closed input channel or an error occurred. events=0x8
09-19 21:57:02.222: E/InputDispatcher(153): channel '410c5958 com.nju.ecg/com.nju.ecg.wave.WaveScreen (server)' ~ Channel is unrecoverably broken and will be disposed!
09-19 21:57:02.232: W/InputDispatcher(153): Attempted to unregister already unregistered input channel '410c5958 com.nju.ecg/com.nju.ecg.wave.WaveScreen (server)'
09-19 21:57:02.232: D/dpt(153): setPerformanceMode: 2
09-19 21:57:02.232: I/ActivityManager(153): Process com.nju.ecg (pid 28658) has died.
網上很多關於此問題的提問,最全的總結可以參考這篇文章 http://blog.csdn.net/name_david_lee/article/details/7972957,
我的程式得以解決這個問題靈感也來自這篇文章,這邊稍作總結:
很多人在問Log裡面看不到任何異常資訊,只能看到上述日誌,實際總結到最後,就是因為異常沒有得到捕獲導致用戶端崩潰,有人問我使用了全域異常捕獲,為什麼還是捕獲不到?這裡只能告訴你,這個異常不是我們自己寫的代碼引起的。在這裡我只能分享下我的項目為什麼會捕獲不到這個異常,其他情況大家可以聯絡起來分析分析。我的項目使用了so庫(c,c++編譯打包提供給Android使用Native方式調用),這個庫中有一個方法沒有捕獲異常資訊,JAVA層調用該方法也未捕獲異常(就算捕獲了,最多程式不崩潰,但是也看不到異常資訊),所以導致Android程式異常終止但是無任何異常顯示。
希望能幫到遇到同樣情況的朋友,其他未能捕獲的異常看各個具體項目了,這裡不做更多分析。
簡單點,so庫做一個除法,除以0,就會報著個錯,而且上層無法收到。