2011-06-06 61 views
0

我正在創建一個phonegap應用程序,並希望防止其崩潰。我認爲如果我能找到一種在全球範圍內管理異常的方法,我可以捕捉到異常並忽略它。但是,到目前爲止,我的錯誤捕獲代碼似乎沒有拿起它。Phonegap和捕捉全局android異常

無論如何,我做錯了什麼想法?我應該嘗試一種不同的方法嗎?

Thread.setDefaultUncaughtExceptionHandler(new UncaughtExceptionHandler() { 

     @Override 
     public void uncaughtException(Thread thread, Throwable ex) { 
      Log.e("uncaught error",ex.getMessage()); 
      Log.e("uncaught error",ex.getStackTrace().toString()); 

     } 
    }); 

回答

0

當然,這聽起來不是一個好主意。

異常機制已被設計爲單獨回答每個異常。當然,您可以對它進行微調,併爲每種異常類型都設置非常特殊的catch子句,或者使用繼承一起使用較粗略的方法和組合異常。

但是,對於發生的每件事都有一個單獨的catch子句並不是一個好主意。雖然有一種情況我會推薦這種模式:對於需要特別強大且始終運行的服務器,能夠從任何情況中恢復。

但是對於一個android應用程序,沒有。

因此,我建議您仔細觀察代碼在哪裏通過logcat拋出異常,並修補程序面臨的每個問題。 如果你正在尋找一種方法,在某個地方而不是在整個程序中,捕捉所有拋出的東西,使用Throwable接口,所有可以拋出的超類(接口)。

try 
{ 
    //your code 
}//try 
catch(Throwable t) 
{ 
    t.printStackTrace(); 
}//catch 

問候, 斯特凡

+0

的問題是,我的應用程序基本上是網頁視圖中運行(使用手機的差距)。 Phonegap是一個框架,允許以javascript/html/css編寫的應用程序作爲本機應用程序運行(查看webview)。實際上沒有任何地方可以放置try/catch塊,因爲在加載完所有東西之後,框架中的某處會引發錯誤。我不想知道框架的細節;我只是想能夠忽略它拋出的錯誤。我已經捕捉到了JavaScript中的錯誤,並且我缺少的任何內容都不應該導致webview崩潰。這個來自別的地方。 – i8abug 2011-06-06 20:01:54

+0

例外情況可能會在其他地方「被抓到」。 setDefaultUncaughtExceptionHandler()只在* Nothing時捕獲Runnable.run() – seand 2011-06-06 20:12:25

+0

中的異常時纔有用如果push-come-to-shove可以破解Phonegap本身:) – seand 2011-06-06 20:13:16