国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

Android Hybrid App四大坑

cooxer / 428人閱讀

摘要:缺少標準是里面一項非常重要的改進,大大改善了布局工作。為了提升用戶體驗,我們多數(shù)使用事件部分替代事件,以便及時響應用戶操作。不過要注意,在響應時,會自動觸發(fā)它的元素的,所以要用新增的屬性進行二次對比,以免誤傷。

  

首發(fā)我的博客:Android Hybrid App四大坑

首先解釋下題目,Hybrid App,混合應用,代表平臺PhoneGap,一般指使用原生包裝Web頁面開發(fā)的應用。與原生應用相比,主要用戶界面和業(yè)務邏輯都是用Web技術也就是HTML+CSS+Javascript實現(xiàn)的;與Web應用相比,Web部分打包在應用內部,使用時不需要網(wǎng)絡。

順便說一句,很多解決方案其實不算Hybrid,比如Adobe AIR、Titanium、Mono,這些都是使用某一特定技術開發(fā)跨平臺應用的工具,最終產(chǎn)品都是編譯成原生來跑的。

我們沒有選擇PhoenGap為技術基礎(我對此并不滿意,我認為以PhoneGap為基礎可以少走一些彎路,少花一些精力,還能產(chǎn)出很多有價值的副產(chǎn)品),而是自行開發(fā)原生框架,主要目標平臺是Android——嗯,就是那個從系統(tǒng)版本到模塊組合都巨分散的Android,可以這么說,坎坷從立項的那一刻起就已經(jīng)注定了……接下來,便請聽我一一講述:Android Hybrid App四大坑。(此文主要針對Android 4.3及之前的webview,部分瀏覽器比如Chrome已經(jīng)改善了具體實現(xiàn),所以Web App其實環(huán)境不錯。)

前端代碼開源就好,https://github.com/Dianjoy/gamepop,要跑起來需要修改config.js,把if (debug) {}的內容刪掉。

缺少標準flexbox

Flexbox是CSS3里面一項非常重要的改進,大大改善了布局工作。可惜從草案到終案時間跨度太長,于是市面上絕大部分設備只支持display:-webkit-box。這給上圖中圖標區(qū)域的布局帶來了難處,最終只能混合使用兩種布局,display:inline-blockdisplay:flex。需要注意,inline-block元素之間,如果在代碼中有空格換行符的話,渲染時會有約0.25em~0.5em大小的間隙,所以想一行4列每列width:25%的話會放不下導致折行。開始我在其父元素中設置font:0/0 a,大部分手機都OK,中興ZTE795就不行,擦,上次也是它……后來我索性把所有空格和換行符都干掉,終于OK了。

這段代碼演示inline-block布局時父元素字體對子元素之間間歇的影響。

所以,對于多行多列的grid布局,我們要謹記:

對父元素使用display:flex; flex-direction: row; flex-wrap: wrap;在現(xiàn)代瀏覽器和Android4.4以上的系統(tǒng)中,可以取得完美表現(xiàn)。
使用display:inline-block; box-sizing: border-box; vertical-align: top;,并且在代碼中移除塊與塊之間的空白字符,避免換行,保留合適的邊距。
遺憾的是,低版本的webview中,高度不會自適應,除非使用js進行計算,不然還是盡量避免在元素下方畫線的舉動。

tap vs click

(這個問題簡直令人發(fā)指。)我們知道,很多瀏覽器默認行為都依賴click事件觸發(fā),比如超鏈接、input[type=radio]的選中,等等。在4.4之前的webview中,click比真實操作延遲約300ms觸發(fā),會帶給用戶明顯的延滯感。為了提升用戶體驗,我們多數(shù)使用tap事件部分替代click事件,以便及時響應用戶操作??蛇x方案很多,Hammer.js、Fastclick,甚至Zepto都有封裝。

于是新的問題出現(xiàn)了。比如我們用實現(xiàn)了一個刪除按鈕,tap時,刪除當前元素,并且將按鈕重置為下載按鈕,href為下載的url。用PC開發(fā)時一切正常,但到真機測試就會發(fā)現(xiàn),因為tap是即時的,新按鈕立刻替換了舊按鈕,300ms后,click事件在新按鈕上觸發(fā)了,結果又開始下載……再比如,圖層中有個后退按鈕,點擊后,圖層移除,露出下面覆蓋的部分,如果在tap的位置上剛好有一枚鏈接,此時就會觸發(fā)click,頁面跳轉……以及,上次總結說的下載鏈接不觸發(fā)click,問題也一樣,只不過翻過來,click該觸發(fā)的時候,被圖層擋住了,所以沒有觸發(fā)。

解決方案基本圍繞“如何熬過300ms”,和“甄別事件對象”來設計。

還是上面兩個場景,第一個,按下之后,setTimeout 400ms(以防萬一)后再替換按鈕;第二個,給圖層加一個消失的動畫,持續(xù)400ms,保證click觸發(fā)時圖層還在。可能大家有疑問,為何不干脆禁掉click事件,前面說了,很多瀏覽器默認行為依賴click事件,禁掉之后又會引發(fā)別的問題。

另一個解決方案是甄別事件對象,在用戶touchstart的時候,記下event.target,等到click觸發(fā)時,對比,如果不一致則認為是抽風,event.preventDefault()。我更推薦這種做法,畢竟400ms也不算短。不過要注意,在響應click時,會自動觸發(fā)它for的元素的click,所以要用新增的control屬性進行二次對比,以免誤傷。

position:relative;竟然搶事件

這個問題解決起來容易,排查時沒少花時間。表現(xiàn)為,一個按鈕,就在那里,但怎么點都沒用。后來只好追蹤全局事件,發(fā)現(xiàn)事件的對象并非按鈕,而是按鈕下面被遮蓋的層。很奇怪,我知道translateZ可能導致這個問題,不過現(xiàn)在完全沒用到;而且下面的圖層實際并沒有那么長(參照上圖中,內容列表和下面的三個按鈕,就是那里),列表的底部是bottom:60px,剛好應該把

的三個按鈕空出來。

然后我開始懷疑position:relative;,因為只有這個東西會影響布局。把它點掉后,按鈕果然可以點了,于是我給

也加上了position:relative;問題就這樣解決了。我覺得這肯定又是個Android Webview的Bug,因為我并沒有給下面層里的元素設置z-index,只有position:relative??傊?,如果按鈕點擊沒反應,盡早看看事件對象是哪個,說不定被哪個層搶走了。

各種待實現(xiàn)的API

caniuse.com是個神器,我在使用某個API或者CSS屬性時不太有把握的話,都會去查一下。然而,誰又知道Android Webview默認很多API都沒開呢?大到localStorage,小到alertconfirm,都需要主動開放,不然就沒法用。測試的時候又很難查,原生的環(huán)境多不在我這兒,配也不太容易,大家的習慣都不一致,只能等對方反饋過來錯誤信息,我到代碼里查,但常常死活看不出來哪兒有問題。

后來認清現(xiàn)實就好辦,Android Webview其實是個半殘廢,有不明白的問題,多半是API實現(xiàn)不全導致的。最簡單的辦法是用modernizr之類的工具進行特性檢測,或者在Weinre、Adobe Inspect CC里直接敲API??傊瑒e懷疑自己,基本都是Android Webview的問題。

這也是我為什么希望以PhoneGap為基礎的原因:PhoneGap已經(jīng)按照規(guī)范實現(xiàn)了大部分API。插件庫也很豐富,比如GA——說到這個,我們想實現(xiàn)一個簡單的統(tǒng)計,因為老板嫌GA太大,所以干脆使用同樣的接口,只請求一下我們的日志服務器,留下條日志就好,結果我們驚訝地發(fā)現(xiàn):Android里原生給Webview環(huán)境增加API,方法的參數(shù)不能多也不能少,不然就報錯,真奇葩——可以省下很多時間。產(chǎn)出的結果,還可以分享到社區(qū)一部分,對于我們公司,也能增加了不少開發(fā)者資源。

總結

早先別人鄙視Hybrid App的時候我也各種不服,心說“你們丫懂毛啊就指手畫腳的說不行”;現(xiàn)在經(jīng)歷了各種大坑小坑連環(huán)坑之后,我的想法已經(jīng)變成了“你們丫懂毛啊不就是一不小心蒙對了么”。

Hybrid App開發(fā)會遭遇比原生和Web App更多的坎坷,這我有心理準備;如此多的坑無形中也在提升我的個人價值,我對此甚至隱隱有些高興。不過我還是希望這段混亂之治盡快過去,Android平臺不要再分裂了,高版本系統(tǒng)盡快普及,所有前端開發(fā)的日子都會好過許多。

現(xiàn)在,如果可能的話,盡量以PhoneGap為基礎進行開發(fā),能省很多時間和精力。對于前端人來說,更是能把測試環(huán)境搬到本地,實在是非常大的幫助。

Android 4.4時再次分裂,之后使用blink作為webview的基礎;之前則是webkit,前者無論CSS還是API都有更佳表現(xiàn),Nexus 5基本沒怎么改就都測試通過了。所以將來老羅的錘子手機開賣我一定買一臺支持他,因為他良心的采用4.4為基礎,對前端真是個難得的好消息。

文章版權歸作者所有,未經(jīng)允許請勿轉載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/110874.html

相關文章

  • 優(yōu)化Recorder H5錄音:可邊錄邊轉碼上傳服務器,支持微信提供Android IOS Hybr

    摘要:開源庫隨著支持功能的增多,音頻轉碼處理效率漸漸的跟不上需求了,近期抽時間對音頻轉碼部分進行了升級優(yōu)化,以支持更多實用的功能?;谝陨蟽牲c問題,似乎只有多線程能夠解決。 Recorder H5 GitHub開源庫隨著支持功能的增多,音頻轉碼處理效率漸漸的跟不上需求了,近期抽時間對音頻轉碼部分進行了升級優(yōu)化,以支持更多實用的功能。另外IOS的Hybrid App也完成了移植,Android...

    CrazyCodes 評論0 收藏0
  • react-native-vector-icons使用遇到的大坑

    摘要:第一次寫文章也是第一次用有需要改正的地方希望大家多多指點由于公司業(yè)務以及需求的擴大用寫已經(jīng)滿足不了當前的需求急需一個處理數(shù)據(jù)流簡單用戶體驗好及入手快的框架在查了好多框架之后最終選擇了簡稱開始用的時候就是從看文檔開始還有就是希望大家在學習 第一次寫文章,也是第一次用react-native,有需要改正的地方希望大家多多指點.由于公司業(yè)務以及需求的擴大,用JQ寫App已經(jīng)滿足不了當前的需求...

    buildupchao 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<