react native 適配安卓有難度么?
為什麼react native 目前只適配ios
之前的回答舊了,rn已經更新了不少版本。目前rn-android逐漸完善。現在已經可以考慮用rn來架構複雜的應用。
-----------------------
組裡開發android的小朋友, 使用RN也有一段時間了,有一天忽然和我說:「我覺得React IOS是親兒子, React Android是撿來的」
當然看得出React IOS更加成熟,開發工具更好用。
React Android確實有很多意想不到的坑, 適配雖然不會比IE7的適配更難, 但問題在於RN Android的hack技術, 還是un documented。 這給RN的適配帶來了很大難度, 我們組遇到的很多問題,一開始都抱頭痛哭。
我不是來黑RN的, 我是RN的支持者。 總體來說VIEW層80%兼容吧。 雖然還是有很多問題,在Android機器上,比如說TouchableX裡面直接放Text, 有時候會觸發Bug。 再比如說TouchableX可能會需要較多操作的setState產生線程衝突造成死鎖……萬惡的touchableX外, 還有RN android的線程處理,有一定的問題。 雖然官方承諾正在修復。
我還是覺得IOS,android工程師一起開發體驗感覺很好,畢竟牛X的工程師,合起來用,就更牛X。 創造力當然是在疊加……
卡頓的地方,都有相應的黑技巧。 有時候是requestAnimationFrame, 有時候是更換下布局。 有時候是緩存VIEW。 真的非常追求體驗的工程師, android上要下功夫了。 但所有的問題, 都是"solve once, use anywhere」 ……歷經辛苦,我們已經順利的在200元左右的安卓機器上跑了非常流暢的RN應用,當然我們還沒有來得及將所有的經驗公布出來。
今天早起了,說說原理吧。 Android如果卡頓了, UI的FPS仍然有60左右, 往往是js渲染線程被無限制拖低了? 可是, 哪有那麼多JS要跑? 何況是virtual DOM + reconciliation技術的RN ? 所以肯定是死鎖。 在 js的main線程setState, 改變了virtual DOM 準備往真的RN android上同步時候, React Native Bridge的調度演算法出了問題(一定是deal lock, 沒有其它可能,因為IOS不卡)。 所以優化技巧往往是讓JS的代碼在時序上下功夫, 比如在setState時候注意加requestAnimationFrame。
當然還有一個更徹底的解法, 就是弄清楚RN的源代碼然後去提PR。 其實從virtual DOM和android同步渲染的reconciliation演算法,我覺得是這塊需要優化~~
謝邀。
(組裡同學在和fb的同學跟進Android版本,佔個坑後續同步信息。)Android版本預計2015.10發布。Community Round-up #26
得到這個消息時還是有點失望的,組裡幾個Android同學也討(y)論(y)過題主的問題,按照rn(react native)技術領域細分:
(知乎圖片壓縮得太厲害,見原圖)
1. 布局及樣式,與其說適配的難度,不如說改變的程度。相對ios,android的布局方式還是比較豐富的,android開發同學也更多使用xml管理layout、theme、style... 切換為rn的css-layout後第一感覺就是:有點弱,有點怪。布局會復用css-layout(facebook/css-layout · GitHub),整體難度上個人覺得不大。
2. 通信機制,rn ios是通過jscore與objc的bridge進行通信(React Native通信機制詳解 ? bang』s blog),android應該也會調用jscore,細節還需要再看下,無法直接評估難度。3. UI渲染,這層通過android實現純native ui,難度感覺還好,像rn發布稿提到的image decoding和text rendering等非同步化也沒問題。4. 性能,會比webview更好,尤其中低端機,這點也是大家比較期待的。5. 穩定性,待補充。6. 擴展性,待補充。7. 編程語言,自然還是React,最大程度復用,按照設計思路「learn once, write anywhere」會有android only api。相關問題:- android上又類似於React Native的優質框架嗎? - 鬼道的回答
- 如何評價 React Native? - 鬼道的回答
這兩天在調研Android,有些小總結,如果是全新的應用,比較好做,如果是整合到之前已有的應用,有兩個問題:1:react-native庫會直接帶動整個編譯環境提升到最高,否則編譯不了。帶來的後續影響是,新的buildtools似乎把很多以前廢棄的函數直接undefine了,即你可能找不到改函數了,好吧,以前的很多業務代碼報錯,需要換種寫法了,比如Notification,比如HttpClient,這些是成本,2:方法數超標的發生,鑒於我們國內app各種sdk的使用,比如我們應用中用到了XG信鴿,alipay,wxsdk等等這些當前幾乎是必不可少第三方庫,很容易導致dexIndexOverFlow,這個問題一旦發生,幾乎是毀滅性的,Android官方文檔介紹了解決方案,但是在5.0以下可能導致任何不適發生,這些都是需要考慮的成本
目前iOS能夠自動適配,android也應該是可以自適應的!
Facebook 在 React.js Conf 2015 大會上推出了基於 JavaScript 的開源框架 React Native,結合了 Web 應用和 Native 應用的優勢,可以使用 JavaScript 來開發 iOS 和 Android 原生應用。
下面是對 React Native 官方文檔的完整中文翻譯教程:Facebook React Native 中文教程推薦閱讀:
※如何看待MIUI開始默認取消內存顯示?
※在同等價位上,有不買榮耀3C和小米這兩款神機的理由嗎?
※Android 版的 Chrome 是不是被神化了?
※如何評價微軟 Android 應用移植項目 Project Astoria 正式終止?
※安卓到底能不能解決流暢性問題,應該怎麼解決?
TAG:Android | webapp前景 | ReactNative |