2012-02-17 63 views
2

的期望的行爲是這樣的:與PhoneGap的旋轉Android設備崩潰

  • 在旋轉的佈局被重建 - 以適應新的屏幕大小。重建是用JQuery和數學 - 而不是CSS完成的。

  • 腳本狀態必須保持不變,同時運行計時器等等。這些應該像沒有任何事情發生一樣繼續。在清單中的所有活動,以處理方向改變自己(注| configChanges =「keyboardHidden方向」:我

爲了實現這個我做了這個:

  • 將機器人m沒有針對某些API,所以我想它默認爲API 1.這意味着將screenSize添加到configChanges是不必要的)。

  • 增加對orientationchange收聽者:

    window.onorientationchange =函數(){ VAR取向= window.orientation; switch(orientation){ case 0: updateScaling(); 休息;

    case 90: 
         updateScaling(); 
         break; 
    
        case -90: 
         updateScaling(); 
         break; 
        } 
    } 
    

updateScaling只調整佈局。

這有時會起作用,但有時會導致設備崩潰(仿真器以及真實設備)。在模擬器的日誌中,我看到以下警告:

WARN/ActivityManager(73):啓動超時已過期,放棄喚醒鎖!

我做了研究,發現添加較長loadUrlTimeoutValue的活動可以幫助,和好,我加super.setIntegerProperty(「loadUrlTimeoutValue」,60000);到主要活動,但如預期也沒有幫助。

我發現很多人抱怨PhoneGap的旋轉問題。也許框架只是在這方面的越野車?我也用蘋果設備進行測試,在那裏我甚至無法捕捉旋轉事件 - iPhone模擬器甚至沒有改變方向,iPad改變了它,但事件處理程序沒有被調用,並且佈局保持相同的大小。我嘗試使用一種解決方法,我發現附加一個偵聽器到文檔。但它也沒有幫助。

旋轉設備時是否有完全可靠的方法來重建佈局?如果沒有,我可以禁用應用程序初始化後的旋轉(也就是說,我不想修復縱向或橫向 - 我希望應用程序在使用當前初始化後禁用旋轉更改)。有沒有可靠的方法來做到這一點?

感謝

回答

0

我不太清楚,如果這個固定的崩潰問題,或者別的東西,我做了「在路上」。

但我添加了工作可靠的監聽器 - 至少在Android上:

$(window).resize(function() { 
    updateScaling($('body').width()); 
}); 

它總是調用,並通過正確的寬度。據我記得它也適用於screen.width

在updateScaling我計算scalingFactor並調整我的元素。

我刪除了window.onorientationchange。

注意:這可能是在崩潰時,我在清單中使用了android:configChanges =「keyboardHidden」,而不是android:configChanges =「orientation | keyboardHidden」。 AFAIK這意味着系統重建活動,這可以解釋超時。但在這種情況下,我不知道爲什麼super.setIntegerProperty(「loadUrlTimeoutValue」,60000);沒有幫助。

結論

$(窗口).resize與Android的組合:configChanges = 「方向| keyboardHidden」 爲我工作。