kotlin 用协程做网络请求_中国电信营业厅: 感受 Kotlin 的 quot;加速度quot;
電信營業(yè)廳應用的技術(shù)團隊所面臨的挑戰(zhàn),基本都和 "速度"?有關(guān):
電信營業(yè)廳 app 不是簡單的工具應用,而是中國電信在線服務的官方品牌,并基于這個定位打造成了包括電商、互聯(lián)網(wǎng)直播、閱讀、音樂、影視、游戲、資訊、生活服務、公益事業(yè)的綜合服務平臺。要確保如此繁多的功能都流暢穩(wěn)定地運行,對技術(shù)團隊的開發(fā)效率都有十分高的要求。
龐大的用戶群體也使得應用運行的硬件和平臺十分多樣,技術(shù)團隊需要跟得上用戶們更換新設備、更新操作系統(tǒng)的速度。
大型應用自然也會有龐大的歷史資產(chǎn),一旦需要對這些資產(chǎn)進行迭代,也需要盡可能降低時間成本。
第一腳油門總是需要慎重
2017 年上海,開發(fā)團隊在谷歌開發(fā)者大會上了解到 Kotlin 技術(shù)框架已經(jīng)日趨成熟,在看到很多主流應用紛紛開始使用 Kotlin 之后,團隊便決定將 Kotlin 作為重點研究和學習的方向,并開始定期舉辦內(nèi)部的學習和分享活動。△ 電信營業(yè)廳技術(shù)團隊核心成員于谷歌開發(fā)者大會。
左起:?付迎鑫 (電信營業(yè)廳技術(shù)負責人)、劉峻宇 (電信營業(yè)廳星播客項目經(jīng)理)、曾皓 (電信營業(yè)廳 Android 項目經(jīng)理)、張熠 (電信營業(yè)廳 Android 項目經(jīng)理)、黃森燊 (電信營業(yè)廳 Android 開發(fā)工程師)但對開發(fā)者們來說,感受一門語言最直接的方式,依然還是上手開發(fā)。于是團隊決定先在中國電信渠道中心的內(nèi)部應用?"電渠報表"?中使用 Kotlin 作為主打開發(fā)語言。十分簡潔的語法,對 lambda 表達式的支持,以及充分考慮了現(xiàn)代編程需求的架構(gòu),讓團隊 "打開了新世界的大門"。之后 Kotlin 很快就出現(xiàn)在了中國電信渠道中心的各個核心業(yè)務中,包括本文開頭提到的電信營業(yè)廳應用,以及電信星播客應用。"目前來看,項目整體已經(jīng)有 20%?在使用 Kotlin,開發(fā)新功能的話 50%?的代碼都是 Kotlin。"—— 付迎鑫,電信營業(yè)廳技術(shù)負責人△ 用來 "小試牛刀?的電渠報表應用開得快,開得穩(wěn)
其實很多時候,"快" 和 "穩(wěn)"?并不矛盾——疾馳的跑車如果時不時爆胎,那顯然也是跑不快的。空指針異常 (NPE) 導致的崩潰 (或 ANR) 就是讓開發(fā)者和用戶們沮喪的 "爆胎"。Kotlin 可以保護項目避免對可空類型進行誤操作。如果類型檢測正確,編譯器還會進行自動類型轉(zhuǎn)換,NPE 的出現(xiàn)概率降低了 80% 之多,項目穩(wěn)定性和健壯性顯著提高,更為對接和展示各省返回的業(yè)務數(shù)據(jù)打下了良好的基礎(chǔ)。Kotlin 的另一個關(guān)鍵新特性是協(xié)程,它是一個輕量級的線程,一個線程中可以創(chuàng)建任意個協(xié)程,線程的執(zhí)行和結(jié)束是由操作系統(tǒng)調(diào)度的,而協(xié)程可以讓開發(fā)者手動控制其執(zhí)行和結(jié)束。在項目中,團隊會結(jié)合使用 Retrofit 和協(xié)程來處理網(wǎng)絡請求,從而更好地控制任務的執(zhí)行,這樣會比單純使用線程更加節(jié)省資源,也更加高效。在使用協(xié)程后,團隊得以降低首頁各個頻道接口調(diào)用所需的資源,接口調(diào)用周期也更加可控。目前電信營業(yè)廳的首頁和商城等核心頁面都是通過 Kotlin 打造出流暢的使用體驗。△ 電信營業(yè)廳應用的首頁和商城頁面Kotlin 的 "快"?還體現(xiàn)在對代碼的精簡上。對于習慣了冗長 Java 代碼的 Android 開發(fā)者來說,Kotlin 的 SAM (Single Abstract Method) 轉(zhuǎn)換一下子縮減大量的模版代碼可能會讓他們不太適應——尤其是在通過 lambda 表達式實現(xiàn) SAM 轉(zhuǎn)換的時候。但更簡潔、更有可讀性的代碼無疑可以讓開發(fā)者的注意力更容易集中在業(yè)務邏輯上,而不是冗長的模版代碼上。另一個能大量精簡代碼的地方是控件綁定,以前在 Activity 中需要為綁定控件編寫大量的代碼 (沒錯,就是 "findViewById")。引入 Jetpack View Binding 之后,ID 可以直接當做變量使用,在 ViewBinding 推出之后,配合 Kotlin 能寫出更加安全和簡潔的代碼。是時候看看遠方的風景了
使用 Kotlin 帶來的另一個好處,就是進入 Android 平臺新功能的 "快車道"。
比如 Android 10 的時候平臺增加了對折疊屏設備的支持,但想要讓用戶在折疊/展開設備時感覺流暢,免不了需要讓應用妥善保存界面狀態(tài)和支持配置變更,用 Java 編寫這種 "保存/讀取配置"?的工作雖然可行,但 Kotlin 的 lambda 解構(gòu)方式能夠幫助開發(fā)者更加方便地對需要保存的實體類和相關(guān)配置進行修改和讀取,代碼更加精簡,可讀性也更好。
△ 電信營業(yè)廳的折疊態(tài)和展開態(tài)在 Android 支持 5G 之后,開發(fā)團隊可以通過 ConnectivityManager 類拓展的新方法為 5G 用戶打造更加快速的網(wǎng)絡體驗。對那些流量敏感的用例,也可以直接使用網(wǎng)絡連接 API 來檢測設備是否進行了高帶寬連接,并能檢查連接是否計費。這時,開發(fā)團隊大量使用了 Kotlin 的局部委托屬性,使代碼更加清晰明了。- 網(wǎng)絡連接 APIhttps://developer.android.google.cn/reference/android/net/ConnectivityManager
- 識別非計費狀態(tài)https://developer.android.google.cn/reference/android/net/NetworkCapabilities.html#NET_CAPABILITY_NOT_METERED
來自團隊的經(jīng)驗分享
從接觸、了解 Kotlin,到逐步嘗試,乃至正式采用,電信營業(yè)廳技術(shù)團隊總結(jié)了一些第一手的經(jīng)驗,這里和大家分享。
在使用 Kotlin 前,首先要對項目組成員對 Kotlin 的熟悉程度做一個簡單的評估。對于新項目來說,需要對項目本身工作量進行評估,如果時間規(guī)劃上比較充裕,可以考慮引入 Kotlin,這也可以讓開發(fā)團隊在實踐中更加了解 Kotlin;而對于老項目來說,就需要綜合考慮兼容性、穩(wěn)定性、維護性等其他相關(guān)因素。
需要為兼容性相關(guān)問題多預留一些解決時間,尤其是項目組成員對 Kotlin 還不那么熟悉的時候。
如果在開發(fā)過程中發(fā)現(xiàn)最新的 Kotlin 需要升級到 AndroidX,需要慎重推進。因為升級 AndroidX 又會和很多第三方庫產(chǎn)生沖突,這時只能通過與第三方進行協(xié)調(diào)來解決問題。
更簡潔、更高效、更現(xiàn)代的 Kotlin,已經(jīng)讓電信營業(yè)廳技術(shù)團隊感受到了真實的 "加速度"。您是否已經(jīng)準備好進入 Android 開發(fā)的 "快車道"?了呢?
推薦閱讀
?點擊屏末?|?閱讀原文?|?查看更多開發(fā)者精彩故事總結(jié)
以上是生活随笔為你收集整理的kotlin 用协程做网络请求_中国电信营业厅: 感受 Kotlin 的 quot;加速度quot;的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: bilibili有电脑版吗_哪个手机便签
- 下一篇: Rabbitmq java.util.c