2013-04-09 66 views
0

最近,我開始寫一個PhoneGap的Android應用程序,並注意到,當應用從後臺恢復(所以我的應用程序部署到Android平板電腦,按主頁按鈕,然後重新打開從菜單中的應用程序),它給出了一個超時錯誤(錯誤代碼= -6的影響與服務器的連接不成功),然後崩潰。從我測試過的情況來看,這似乎只在開發人員選項中選中「不保留活動」選項時纔會發生,如果未選中該選項,該應用程序將按預期工作。爲什麼我的phoneGap Android應用程序在恢復時崩潰?

另外值得一提的是,我重新創建默認的PhoneGap應用程序,運行它,並遇到了同樣的問題。

誰能解釋爲什麼出現這種情況,或提出一個解決辦法?很明顯,我可以解決這個問題,只需將不要保留活動選項取消選中,但我猜這個問題會持續在任何安裝了此選項的Android設備上,這是不會做的。

我使用PhoneGap的2.5.0和運行Android 4.0.3測試設備上,

感謝, 喬希

+1

「開發人員選項」 是開發商。他們甚至隱藏在Android 4.2及以上版本的默認設置中,需要一組奧妙的按鍵來啓用它們。雖然理想情況下應用程序不會在這種情況下崩潰,但擁有此檢查並且不是*開發人員的人的百分比非常小。而且,除非你是Java程序員,並且願意/能夠協助診斷和修復問題,否則除了可能在適當的問題跟蹤器上提出問題之外,你幾乎無法做到這一點。 – CommonsWare 2013-04-09 20:09:08

+1

同意!請在我們的錯誤跟蹤器中提出一個問題,並在logcat中包含大量日誌。我們的bug跟蹤器在這裏:https://issues.apache.org/jira/browse/CB如果我們沒有logcat的副本,我們不能重現此問題。 – 2013-04-09 21:37:50

+0

@JoeB感謝您發佈該鏈接,我將在明天上午就此提交一個問題 – Josh 2013-04-09 21:42:56

回答

1

「不保留活動」是一個開發工具來模擬用戶活動這將是非常難以測試。我個人認爲所有應用都應該在開啓此設置的情況下進行第二次測試(至少運行自動測試),開發者應該在開發過程中將其打開/關閉。

您的問題(我剛剛跑進在V2.7)來自一個愚蠢的執行超時功能。 CordovaWebView.loadUrlIntoView創建和鎖(wait())20秒(默認值),在該時間之後它檢查的值,以查看是否鏈接完成加載一個線程 - 如果它尚未完成,則顯示一個錯誤消息。

此線程存在於您的活動生命週期之外,因此如果活動停止運行,Webview永遠無法完成加載url,並且當線程喚醒時,它會嘗試顯示錯誤。

死機一樣可能發生,而無需使用簡單地讓用戶退出應用程序,然後系統回收活動的資源(因爲它是內存不足或某事),在20秒內「不保留活動」。

使用Handler似乎是一個更合適的方式來處理這種超時,但不改變源代碼有一些hacky工作。

  1. 呼叫System.exit(0)在結束你的Activity.onDestroy() - 這是可怕的,但如果你只有一個活動,沒有服務,它可能是一個選項

  2. 使用反射來改變CordovaWebView.loadUrlTimeout - 這是可怕的,但它應該工作,這是線程檢查是否加載URL(由1加)的值。

相關問題