精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

一個前端程序員的一個月原生 Android 開發體驗

新聞 Android
一個前端程序員的一個月原生 Android 開發體驗。自從我寫了 Android 應用后,上知乎的時間變得更長了。

一個前端程序員的一個月原生 Android 開發體驗。自從我寫了 Android 應用后,上知乎的時間變得更長了。

自從我寫了 Android 應用后,上知乎的時間變得更長了。哦,不對,你理解錯了,我的意思是:編譯代碼、打包 APK、運行在設備上需要時間??刹幌袂岸耍槐4娲a,就自動刷新頁面。

是的,從上上周一開始,因為項目缺人的原因,作為一個有 Java 開發經驗的大前端,我又又雙叕進入了原生 Android 開發的世界。

這一個月下來,也算是有一些寫 XML 的心得吧——不對,寫 Java 代碼,看 Kotlin 代碼的心得??偟膩碚f,Android 與前端的差異并不是非常大,在某些東西上,他們還是蠻相似的。怪不得像我這樣的程序員,會將 Android 開發也歸類到大前端上去。

如果你是一個前端程序員,想學習移動開發;又或者是一個移動開發,想接觸前端開發;那么,本文可能就很適合你去了解兩者間的差異。

本文包含了以下的內容:

  • 編碼效率 vs 可維護度
  • MVP vs MV :后天的 MV
  • 靜態語言 vs 動態語言
  • View 與 DOM
  • 代碼調試
  • 兼容性

(PS:受限于我只有短暫的經驗,所以有些用詞可能沒有那么準確。)

注 :這里的 前端應用特指單頁面應用 。

編碼效率 vs 可維護度

因為從運行效率上來說,原生應用必須遠遠大于 WebView——畢竟 WebView 的背后還是原生應用,直接等于中間多了一個層級。所以,在這里直接討論編碼效率。

從編碼效率上來說,還是前端快,快得不止一點點。

  • 更快的預覽速度。
  • 成熟的生態系統。
  • 大量可用的 UI 框架及組件。
  • 參考別家的實現。Web 前端是開放的世界,在今天來看,要實現的效果基本上已經被實現過了,所以我們可以直接參考
  • 富文本支持好

而考慮到 Android 和 iOS 是各自實現的,那么一個混合應用的開發效率可能是遠遠大于 2 倍,而跨平臺應用(如 React Native、Weex、NativeScript) 的開發效率會接近他們的 2 倍(原因是:集成某些功能時,需要原生代碼來實現,這時工作量直接翻倍等同)。

從目前的維護程度上來說,還是 Java 的代碼相對維護。主要是前端領域的變化太快了,并且在軟件工程上的實踐不像 Java 是必需要求的,因此容易出現大量的遺留代碼。只是考慮到,Java 代碼的臃腫,還是改用 Kotlin 吧。

只需要按下: Command + Alt + Shift + K ,輕松當爸爸。

MVP vs MV :后天的 MV

MVP,即 Model-View-Presenter,對應于視圖層-數據層-展示層。

在 MVP 上來看,前端應用與 Android 都并非天生的 MVP 架構的。不過,兩者在對業務邏輯上的處理,但是沒有多少差異。***能體驗差異的,可能就是 JavaScript 的異步,以及 Java 的同步帶來的一些差別。

V*

采用了框架的前端應用,則會因此而帶上 MV* 的加成。一旦選用上了某個框架,那么你只能按照其特有的模式,如 Vue 提供的核心是 MVVM 中的 VM,React 則只是 MVC 中的 View 層,則 Angular 則可能是 MVW(Model-View-Whatever)。在這種情況下,要在框架的基本之上變更,那么靈活性上可能沒有那么大。

而 Android 方面則是 MVP 架構,其主要依賴于 約定俗成 ,其中一個參考的規范就是 Google 官方的 android-architecture ,又或者是社區上推薦的 Clean Architecture。而無論是 Clean Architecture,還是 MVP,其都依賴于 約定 。一旦我們談及參考的時候,便意味著靈活性——可遵循,可不遵循。

在這種時候,Android 的 MVP 需要我們自己去創建 MVPView,創建 Presenter。

  1. public class MainActivity extends AppCompatActivity implements MainView { 
  2.     ... 

而整個 MainActivity 只是一個 View 層,真正的業務邏輯要交給 Presenter 來處理。簡單來說,就是你需要手動地創建四五個類,才能完成一個 Activity 的 Hello, world。

Model

與此同時,Android 默認是要對 Model 進行校驗和轉換的。因為取出 JSON 中的某個值,需要將 JSON 轉換為對象——可以直接使用 Retrofit 庫來轉換數據,又或者用 GJSON 轉換成某種對象。算是與前端的一個大的區別,在前端世界里,這種事情是輕而易舉的,有***的 JSON.parse 。

在使用 JavaScript 編寫的時候,可以不對 Model 進行校驗。不過,在 React 里會有 proptypes ,在 Angular 里可以用 TypeScript 來做相似的事。

與沒有對象校驗的前端相比,一旦出錯,根本不容易察覺。這一點,或者也是一個優勢所在——當你上架了新版本的 API 時,舊的應用不會 NullPointerException。與此同時,在開發的時候,后臺 API 發生變化的時候,也會導致后續的一系列 bug。

靜態語言 vs 動態語言

自從我寫了 Android 應用后,上知乎的時間變得更長了。

編譯與動態運行

當我們編寫 Web 應用的時候,只要一保存代碼,網頁就可以由 LiveReload 這樣的工具來幫我們自動刷新。于是,在諸如 React Native 這樣的跨平臺框架里,也有 Live Reload 這樣的特性。

而當我開發 Android 應用的時候,每次我想試著在手機上查看效果的時候,得構建、編譯代碼、安裝,大概得等上個兩三鐘才能運行在虛擬機或者真機上。

可事件往往不會這么順利,動不動會遇上個 NullPointerException ,然后應用就 Crash 了。這個時候,就要去修復代碼中的問題,加個 blabla!=null ,然后編譯,繼續 Crash。

怪不得 Android 的程序員喜歡上了 Kotlin,只要一個 view? 就能判斷是不是有值的事:

  1. override fun onCreateView(inflater: LayoutInflater?, container: ViewGroup?, savedInstanceState: Bundle?): View? { 
  2.     val view = inflater?.inflate(R.layout.fragment_home, container, false
  3.     val button: Button = view!!.findViewById(R.id.open_rn_button) 
  4.     button.setOnClickListener(this) 
  5.     return view 

可由于沒有經驗,我經常把 val 寫成了 var 。這就和那些習慣寫 alloc init 的 iOS 程序員,一夜間突然喜歡上了寫 ES6 一樣:

  1. let className = NSStringFromClass(MyClass) 
  2.  let classType = NSClassFromString(className) as? MyClass.Type 
  3.  if let type = classType { 
  4.    let my = type.init() 
  5.  } 

哦,不對他們寫的是 Swift。

并且作為一個面向對象的語言,Java 天生就意味著,大量的臃腫代碼。

  1. public int getId() {   
  2.     return id;   
  3. }   
  4. public void setId(int id) {   
  5.     this.id = id;   
  6. }   
  7. public String getName() {   
  8.     return name;   
  9. }   
  10. public void setName(String name) {   
  11.     this.name = name;   

大量的代碼,就意味著大量的 bug ,一定量的重復代碼,一下子又回到設計模式的天下。

IDE 支持

好在,由于 Android Studio 有強大的、良好的 Intellij 支持。在 IDE 上對語言的支持,要比 JavaScript 的 第三方庫 支持友好得多:

要知道 WebStorm 或者 Intellj IDEA 專業版,它們在 JavaScript 第三方類的支持上就是坑。

View 與 DOM

過去,前端在 DOM 操作上存在天然的問題,即在我們使用 $("*") 的時候,全局。當然現今的框架,在這個問題上比較少,但是考慮到仍然可能會被誤用,或者注入。而 Android 則是局部頁面的。

樣式復用

前端使用 HTML + CSS 來編寫樣式,而安裝則只使用 XML 來切圖,這并不是一件容易的事。不像 CSS 可以通過 “繼承” 和 “覆寫” 的形式來實現樣式復用。Android 中也有類似于 JavaScript 生成 HTML 的方式,自定義模板。

當我們使用 React 編寫組件的時候,可以傳遞對應的屬性到組件中,這個屬性可以是函數、值、組件等等。

  1. MyComponent.propTypes = { 
  2.   optionalArray: PropTypes.array, 
  3.   optionalBool: PropTypes.bool, 
  4.   optionalFunc: PropTypes.func, 
  5.   optionalElement: PropTypes.element 

而在 Android 的布局上,這就不是一樣容易的事。為了復用樣式,需要抽取成 UI 組件,還只能是 UI 上的組件。只能實現 HTML + CSS 上的復用。

HTML + CSS 在編寫 UI 的時候,有各種奇技淫巧,比如說樣式的優先級,或者 important 。

雙向綁定

從原生的角度來看,前端的 document.getElementById() 與 Android 的 findViewById 并沒有多大的區別。而當前端有了前端框架之后,就不一樣了。好在 Android 有 ButterKnife 這樣的 View 注入框架。

與此同時,Android 還自帶了雙向的 DataBinding,而原生的前端是沒有的。

只是前端有前端框架,在這一點也完全問題也不多。

布局調試

還好,已經有寫 React Native 布局的一些經驗,在寫起 Android 的布局,倒也還好——沒有那么坑。

在布局調試上,還是前端用瀏覽器調式方便——還可以在瀏覽器實時修改 DOM 結構。Android 也有這樣的工具,叫 Layout Inspector :

除此,還可以通過 Facebook 家的 stetho 做與 Web 相關的調試工作:

總的來說,還算是不錯的。就是這個結構,看上去和 React Native 怎么那么樣呢?

代碼調試

在代碼調試上來說,Java 底子厚,總的來說會比 JavaScript 好一些。

除此,記得我們在 Chrome 瀏覽器里可以打斷點,隨后在 Console 中做出一些計算。而得益于 Android Studio 背后的 JetBrain 的 Evaluating Expressions,可以實時計算表達式的值,Android 上的代碼調試也是很容易的。

而以我有限的 Objective-C 編程經驗來說,XCode 也是可以做到的。

網絡調試

在 Chrome 瀏覽器里,自帶的 NetWorks 幾乎是***的。Android 方面也可以借助于 Stetho 來使用:

但是依賴上比較大,需要在頁面上注入,并且調試不了插件化的應用。要調試網絡吧,還是 Charles 好用一些。

可是,萬一開發環境 HTTPS 了呢,不就更麻煩了。

兼容性

前端面臨的是調試不同的瀏覽器,又或者是兼容 IE。總的來說,問題都不大——不會面臨閃退的問題。即使出了點小問題,用戶可以先換個瀏覽器試試。而當你的 Androdi 應用在用戶的手機上閃退了,那么用戶只能換個 APP 了。

除此,Android 則是面臨碎片化的系統,不同的版本,及不同的屏幕大小,總的來說,要對前端復雜得多。

結論

Android 在軟件工程上做得相當優秀,而前端則是在開發效率上占優勢。

Web 開發大法好。

責任編輯:武曉燕 來源: Phodal全棧工程師
相關推薦

2020-02-22 21:51:43

程序員Microsoft SServerSQL

2013-05-27 09:47:33

Java開發Java跨平臺

2014-01-06 09:33:32

程序員管理

2020-10-05 21:13:37

程序員技能開發者

2015-06-16 10:31:36

程序員

2020-07-10 09:55:15

程序員技能開發者

2015-06-08 10:48:39

程序員程序員自白

2011-02-14 13:05:17

PythonWeb

2019-04-01 14:17:36

kotlin開發Java

2018-09-04 15:15:56

程序員開發時間

2019-11-07 15:30:00

EmacsIDE

2012-11-28 13:25:27

程序員

2023-12-26 18:47:32

2012-04-12 14:49:31

程序員

2009-02-12 15:07:57

程序員創業經驗

2019-04-22 10:25:52

程序員技術職場

2015-05-13 14:06:03

程序員糟糕的程序員

2010-10-18 11:39:41

程序員

2015-08-24 10:07:13

程序員bug
點贊
收藏

51CTO技術棧公眾號

久久亚洲精品大全| 久久久久久久久久久影视| 高清av在线| 国产一区二区三区在线观看免费视频 | 在线播放高清视频www| 久久久精品天堂| 91免费看国产| 91浏览器在线观看| 日韩成人精品一区| 欧美精品一区二区三区四区| 欧美黄色一级片视频| 国产黄a三级三级三级av在线看| 风间由美性色一区二区三区| 国产成人精品国内自产拍免费看| 极品魔鬼身材女神啪啪精品| 亚洲国产欧美日韩在线观看第一区 | 99久久精品国产精品久久| 国产精品激情自拍| 亚洲国产精一区二区三区性色| 国产免费久久| 欧美精品一区二区在线观看| 妺妺窝人体色www在线观看| 黄色在线免费看| 久久婷婷国产综合精品青草| 5g国产欧美日韩视频| www.久久网| 日韩午夜激情| 美女av一区二区三区| 亚洲一区视频在线播放| 风间由美性色一区二区三区四区| 欧美无砖专区一中文字| 天天夜碰日日摸日日澡性色av| h视频在线免费观看| 国产区在线观看成人精品| 国产伦精品一区二区三区四区视频 | 91文字幕巨乱亚洲香蕉| 一区二区视频免费观看| 亚洲一级在线| 久久人人97超碰精品888| 在线视频这里只有精品| 九一成人免费视频| 日韩av在线天堂网| 国产a级片视频| 中文成人激情娱乐网| 欧美在线|欧美| 国产二区视频在线播放| av福利导福航大全在线| 亚洲精选一二三| 亚洲欧美日产图| 国产高清视频在线播放| 久久精品人人做人人爽人人| 国产一级精品aaaaa看| 亚洲精品无码久久久| 国产一区二区女| 91美女片黄在线观| 亚洲天堂aaa| 久久成人av少妇免费| 国产精品爽黄69| 中文字幕av片| 青青草国产精品97视觉盛宴| 国产精品777| 男人天堂视频网| 日韩影院在线观看| 国产精品扒开腿做爽爽爽视频| 成人午夜淫片100集| 99成人在线| 日本精品久久久久久久| 久久人妻免费视频| 三级欧美韩日大片在线看| 国产精品96久久久久久| 一区二区乱子伦在线播放| 秋霞影院一区二区| 国产有码一区二区| 精品人妻aV中文字幕乱码色欲| 国产精品一卡二卡| 国产精品.com| 欧洲综合视频| 日本一区二区综合亚洲| 咪咪色在线视频| 在线观看操人| 午夜成人在线视频| 日韩精品一区二区三区久久| 成人看片网页| 日韩欧美色综合网站| 97人妻精品一区二区三区免费 | free欧美| 777亚洲妇女| 亚洲图片欧美另类| 亚洲自拍都市欧美小说| www.国产精品一二区| 久久久久久久久久91| 一区二区三区福利| 国产精品永久免费观看| 午夜免费福利视频| 2023国产精品自拍| 亚洲一二三区在线| 97在线超碰| 欧洲激情一区二区| 18深夜在线观看免费视频| 日韩高清一级| 久久激情视频久久| 国产精品一区二区三区四| 美美哒免费高清在线观看视频一区二区| 91在线色戒在线| 青春有你2免费观看完整版在线播放高清| 国产精品久久久久久久岛一牛影视 | www.色.com| 九九视频免费观看视频精品| 久99久在线视频| 自拍偷拍福利视频| caoporm超碰国产精品| 亚洲欧美精品在线观看| 国产伦子伦对白在线播放观看| 欧美日韩一区二区三区在线| 亚洲一级Av无码毛片久久精品| 欧美午夜精品一区二区三区电影| 久久久久久久成人| 一级黄色片视频| 久久亚洲精精品中文字幕早川悠里 | 国产成人精品av| 蜜桃久久一区二区三区| 中文字幕日本乱码精品影院| 免费在线激情视频| 97久久超碰| 久久亚洲一区二区三区四区五区高| 天堂中文在线网| 成人美女在线观看| 香蕉视频在线网址| 久久91视频| 亚洲人线精品午夜| 日韩成人免费观看| 丁香一区二区三区| 女女同性女同一区二区三区按摩| 偷拍视频一区二区三区| 亚洲精品美女在线观看| 农村黄色一级片| 久久国产视频网| 视频一区二区综合| 成人啊v在线| 亚洲女人天堂色在线7777| 中文字幕日韩一级| k8久久久一区二区三区| 97超碰在线人人| 第四色在线一区二区| 色综合色综合网色综合| 国产99对白在线播放| 亚洲欧美区自拍先锋| 中文字幕国产高清| 天天射成人网| 成人欧美一区二区三区黑人孕妇| yiren22综合网成人| 在线这里只有精品| 精品成人无码一区二区三区| 日韩激情一二三区| 欧美一区亚洲二区| 欧美日韩亚洲国产| 日韩在线激情视频| 亚洲综合视频在线播放| 亚洲欧美在线高清| 狠狠干狠狠操视频| 亚洲色图欧美| 99热99热| 免费在线小视频| 亚洲精品综合精品自拍| 少妇一级淫片日本| 国产精品国产自产拍高清av| 亚洲怡红院在线| 欧美一区视频| 国产亚洲精品美女久久久m| 免费看男女www网站入口在线| 亚洲欧美国产精品专区久久 | 殴美一级黄色片| 狠狠色综合色综合网络| 日本老太婆做爰视频| 88久久精品| 欧美综合在线第二页| av资源在线观看免费高清| 欧美三日本三级三级在线播放| 国产老头老太做爰视频| 成人一级黄色片| 爆乳熟妇一区二区三区霸乳| 真实国产乱子伦精品一区二区三区| y111111国产精品久久婷婷| 天堂在线中文网官网| 国产性猛交xxxx免费看久久| 国产免费高清视频| 午夜精品国产更新| 日韩女同一区二区三区| 国产在线播放一区三区四| 和岳每晚弄的高潮嗷嗷叫视频| 日韩三区视频| 亚洲aⅴ男人的天堂在线观看| 91超碰免费在线| 中文字幕日韩综合av| 亚洲国产精品成人久久蜜臀| 欧美体内谢she精2性欧美| 日本裸体美女视频| 成人国产精品视频| www.com操| 亚洲美女少妇无套啪啪呻吟| 综合色婷婷一区二区亚洲欧美国产| 中文字幕日韩在线| 国产精品一二三在线| 蜜臀av国内免费精品久久久夜夜| 亚洲人在线观看| 亚洲免费一级片| 欧美调教femdomvk| 国产精品视频久久久久久久| 成人免费一区二区三区在线观看| 欧美成人三级伦在线观看| 久久精品国产99| 日韩a在线播放| 午夜精品网站| 一个色的综合| 亚洲欧美校园春色| 国产伦理久久久| 欧美2区3区4区| 国产精品亚洲精品| 一区二区三区短视频| 欧美人在线视频| 欧美黄色激情| 尤物99国产成人精品视频| 天天操天天操天天| 日韩欧美在线影院| 一女二男一黄一片| 色8久久人人97超碰香蕉987| 国产成人无码精品久在线观看| 亚洲人成精品久久久久久| 自拍偷拍你懂的| 国产亚洲一二三区| 国产男女猛烈无遮挡a片漫画| 国产**成人网毛片九色 | 精品人妻人人做人人爽| 日韩久久精品| 日韩中文不卡| 国产精品欧美三级在线观看| 久久久久久九九九九| 成人香蕉社区| 懂色一区二区三区av片| 视频一区在线| 亚洲一区二区在线播放| 成人免费观看49www在线观看| 国产精品嫩草视频| 成人黄色图片网站| 国产精品精品视频| 91成人抖音| 国产精品爽爽爽| 97久久网站| 国产免费一区二区三区在线能观看| 日韩中文影院| 国产精品九九久久久久久久| 日韩不卡在线| 国产主播喷水一区二区| 日日夜夜精品| 亚洲一区二区三区777| 国产视频一区二区在线播放| 成人有码在线播放| 国产亚洲字幕| 亚洲自拍欧美色图| 亚洲一二三区视频| 国产三级精品在线不卡| 猫咪成人在线观看| 欧美aaaaa喷水| 日韩综合一区| 天天综合五月天| 亚洲第一黄网| 97在线免费公开视频| 欧美a一区二区| 亚洲黄色片免费| 国产大陆a不卡| 欧美在线一级片| 久久久久久**毛片大全| 999福利视频| 一区二区免费在线| 国产成人精品一区二三区| 欧美日韩中文字幕综合视频| 最新中文字幕在线观看视频| 7777精品伊人久久久大香线蕉完整版| 国产成人毛毛毛片| 国产视频亚洲精品| 中国日本在线视频中文字幕| 色综合视频一区中文字幕| 欲香欲色天天天综合和网| 国产精品自产拍在线观看| 精品国产一区二区三区性色av| 国产精品久久久久久免费观看| 私拍精品福利视频在线一区| 无码免费一区二区三区免费播放| 久久久久国产精品| 国产网站免费在线观看| 美国十次了思思久久精品导航| 国产精品19p| 久久久91精品国产一区二区精品 | 欧美写真视频网站| www.xxxx国产| 亚洲性猛交xxxxwww| 色噜噜狠狠狠综合欧洲色8| 欧美在线视频一二三| 日韩美香港a一级毛片| 国产日韩二区| 亚洲精品成人影院| 茄子视频成人免费观看| 国产乱码精品一区二区三| 玖草视频在线观看| 亚洲色图欧美偷拍| 国产午夜无码视频在线观看| 日韩午夜小视频| av在线中文| 97精品一区二区视频在线观看| 日韩av懂色| 人偷久久久久久久偷女厕| 欧美激情性爽国产精品17p| 亚洲免费看av| 99精品久久99久久久久| 国产精品久久久精品四季影院| 日本精品视频一区二区| 国内爆初菊对白视频| 日韩最新在线视频| 日本久久免费| 国产伦理一区二区三区| 欧美国产另类| 亚洲网中文字幕| 欧美国产成人精品| 久久精品视频7| 亚洲成人精品av| av在线免费网址| 成人免费视频网址| 日本一二区不卡| 日韩欧美精品在线观看视频| fc2成人免费人成在线观看播放| 欧美成欧美va| 91精品国产综合久久精品app| www.亚洲视频| 国产精品aaa| 欧美女优在线视频| 日韩av一二三四区| 91视频免费观看| 日韩av电影网| 亚洲国产日韩欧美综合久久| 欧美男男video| 岛国视频一区免费观看| 欧美伊人影院| 在线观看欧美一区二区| 亚洲男人的天堂网| 国产口爆吞精一区二区| 久久久国产精彩视频美女艺术照福利| 成人亚洲综合| 一区二区三区av在线| 麻豆精品在线看| 四虎影院中文字幕| 91精品国产入口在线| av毛片在线免费| 91欧美精品午夜性色福利在线| 日韩欧美一区二区三区免费看| 亚洲激情在线观看视频| 欧美激情一区二区三区不卡| 亚洲免费视频二区| 中文字幕在线观看日韩| 日韩专区视频网站| 欧美另类videos| 成人免费av资源| 国产微拍精品一区| 亚洲无亚洲人成网站77777| 成人四虎影院| 熟女熟妇伦久久影院毛片一区二区| 韩国三级电影一区二区| 强乱中文字幕av一区乱码| 精品99一区二区| 中文字幕在线免费观看视频| 欧美一区二区三区在线播放| 久久国产精品99久久久久久老狼| 日本在线一级片| 精品国产亚洲一区二区三区在线观看| sm久久捆绑调教精品一区| 欧美亚洲免费高清在线观看 | 夜间精品视频| av电影在线播放| 欧洲精品中文字幕| 成人短视频在线观看| 久久国产欧美精品| 开心九九激情九九欧美日韩精美视频电影 | heyzo国产| 国产精品卡一卡二| 性中国古装videossex| 欧美一级成年大片在线观看| 日韩1区2区| 国产免费一区二区三区最新6| 一本色道久久综合狠狠躁的推荐| av影片免费在线观看| 成人高清在线观看| 日韩中文字幕亚洲一区二区va在线| 永久免费未视频| 日韩国产精品一区| 91麻豆精品国产91久久久更新资源速度超快 | 真实乱偷全部视频| 色婷婷一区二区| 尤物yw193can在线观看| 日韩精品欧美专区| 高清shemale亚洲人妖| www.久久网|