關於在android webview上運行html5的開發經驗





一、問題描述:

在項目開發中(軟硬件結合項目),爲了實現xp、android、linux三個平臺的統一,選擇html5作爲終端開發語言。html5作爲一種網頁語言,其運行需要藉助瀏覽器,那麼不可避免的問題就是: 
1、選擇什麼瀏覽器來承載跨平臺的界面顯示?
2、前端設計選擇何種框架?(本人負責前端開發)
3、前後端的通信選擇何種方式?
4、如何解決首次進入界面時的閃爍問題?

二、瀏覽器的選擇:


起初總覺得可以找到一種免費開源的瀏覽器,但最後發現,能夠支持xp android linux三大平臺且具備無邊框全屏效果的瀏覽器機會沒有(至少我沒找到,也許找源碼編譯chrome可以實現)。不得已改變了策略,
    利用平臺自身的特點爲html5添加一個殼!比如:android 有webview,xp和linux都可以採用QT的webview,而且兩者都是基於webkit的,這點很滿意,這意味着兩者的差別很小,一份代碼三個平臺都可以運行。


三、前端設計框架


在這之前主要從事androidk開發很少接觸web開發,以至於連強大的angularjs和jquery都不知曉。通過向朋友請教,推薦使用angularjs作爲單界面應用程序的開發,用jquery解決了國際化問題。當然開發過程中遇到N多的問題,
採取各種手段、途徑總算解決了大部分,
當然看書是少不了的,這兩本書《AngularJS權威教程(中文版)》、《JavaScript設計模式與開發實踐》帶我入了門。


四、通信


搞過html5的同事直接告訴我,通信直接調用 webSocket接口,琢磨一天後發現真的很好用。

五、閃爍的問題


這個問題應該是開發過程是遇到的最無解的問題。現象是:任何界面第一次訪問時需要從服務端訪問資源,這個過程會導致資源的加載有快慢之分,主要是圖片和自定義的控件,給用戶的感覺很不舒服,如同平時我們
    網速慢的時候打開網頁一樣。解決的思路是:在應用開啓時可將所有的圖片預加載至angularjs緩存或者瀏覽器緩存。搜索一個星期後找到的方法大概可分爲以下兩種(圖片的預加載):
1、通過new Img()併爲其設置 src屬性實現圖片的預加載,實際是加載到瀏覽器緩存
2、使用$http.get();將圖片預加載至angularjs的默認緩存

這兩種方法都嘗試過,在win10上用chrome作爲瀏覽器,利用mongoose開啓web服務,驗證發現兩種方法都能很好的起到圖片預加載的效果。於是本人很高興的將其放到android上測試,結果一點作用沒有,懷疑是瀏覽器的問題,
    於是在android上裝chrome在跑html5,緩存是有效的。結論很明顯:android webview沒有去緩存圖片。那怎麼辦呢?查webview的相關知識發現,android webview有一堆的設置,按照網上提供的設置,一個個試,
結果不管我怎麼設置,緩存就是不起作用,此刻已經接近奔潰了!
在查找問題的時候一直有一個現象讓我很迷惑:angularjs會將訪問過的資源自動緩存在自帶的緩存中,也就是訪問過的界面再次訪問時瞬間全部顯示。受到這個啓發:何不在啓動時將全部圖片都訪問一次呢?

接着:我在程序初始化界面加了如下代碼
<ul  style="width: 50%; height: 100%;float: left;">
<li ng-repeat="item in array" style="width: 10%; height: 10%;float: left;">
<button  ng-class="item.value"  style="width:0%;height:0%;float: left;"></button>
</li>
</ul>
array是所有css樣式的數組,item.value是對應的class名稱,同時將button的width:0%;height:0%,如此一來即使加載了圖片也不會顯示出來,結果總算緩存了,當我第一次訪問每個界面時,此時的圖片已經準備好了,閃爍效果得到大大的改善。
雖然這個方法很笨但是,解決了實際問題。



希望我的開發經驗能夠給你一點點的幫助,也希望有相關經驗的大神們不吝賜教!
發佈了30 篇原創文章 · 獲贊 21 · 訪問量 3萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章