自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

中國(guó)電信營(yíng)業(yè)廳: 感受 Kotlin 的 加速度

開(kāi)發(fā) 前端
中國(guó)電信電子渠道運(yùn)營(yíng)中心,屬于中國(guó)電信三大主渠道之一,負(fù)責(zé)電信線上渠道的管理與運(yùn)營(yíng)。電信營(yíng)業(yè)廳 app 則是中國(guó)電信線上渠道的主要入口。目前該應(yīng)用的注冊(cè)用戶超過(guò) 2 億,月活躍用戶接近 6,000 萬(wàn),月交易額在 10 億以上。

  "我們手上是一個(gè)很成熟的項(xiàng)目,所以毫無(wú)疑問(wèn)需要保留 Java 代碼,目前只會(huì)在新開(kāi)發(fā)的頁(yè)面中使用 Kotlin,并已經(jīng)感受到了它帶來(lái)的便利。隨著功能的迭代,我們相信更多的功能會(huì)轉(zhuǎn)而使用 Kotlin。"

—— 付迎鑫,電信營(yíng)業(yè)廳技術(shù)負(fù)責(zé)人

中國(guó)電信電子渠道運(yùn)營(yíng)中心,屬于中國(guó)電信三大主渠道之一,負(fù)責(zé)電信線上渠道的管理與運(yùn)營(yíng)。電信營(yíng)業(yè)廳 app 則是中國(guó)電信線上渠道的主要入口。目前該應(yīng)用的注冊(cè)用戶超過(guò) 2 億,月活躍用戶接近 6,000 萬(wàn),月交易額在 10 億以上。

電信營(yíng)業(yè)廳應(yīng)用的技術(shù)團(tuán)隊(duì)所面臨的挑戰(zhàn),基本都和 "速度" 有關(guān):

  • 電信營(yíng)業(yè)廳 app 不是簡(jiǎn)單的工具應(yīng)用,而是中國(guó)電信在線服務(wù)的官方品牌,并基于這個(gè)定位打造成了包括電商、互聯(lián)網(wǎng)直播、閱讀、音樂(lè)、影視、游戲、資訊、生活服務(wù)、公益事業(yè)的綜合服務(wù)平臺(tái)。要確保如此繁多的功能都流暢穩(wěn)定地運(yùn)行,對(duì)技術(shù)團(tuán)隊(duì)的開(kāi)發(fā)效率都有十分高的要求。
  • 龐大的用戶群體也使得應(yīng)用運(yùn)行的硬件和平臺(tái)十分多樣,技術(shù)團(tuán)隊(duì)需要跟得上用戶們更換新設(shè)備、更新操作系統(tǒng)的速度。
  • 大型應(yīng)用自然也會(huì)有龐大的歷史資產(chǎn),一旦需要對(duì)這些資產(chǎn)進(jìn)行迭代,也需要盡可能降低時(shí)間成本。

而 Kotlin 帶來(lái)的 "加速度",則讓開(kāi)發(fā)團(tuán)隊(duì)切實(shí)感受了一把 "推背感"。

第一腳油門(mén)總是需要慎重

2017 年上海,開(kāi)發(fā)團(tuán)隊(duì)在谷歌開(kāi)發(fā)者大會(huì)上了解到 Kotlin 技術(shù)框架已經(jīng)日趨成熟,在看到很多主流應(yīng)用紛紛開(kāi)始使用 Kotlin 之后,團(tuán)隊(duì)便決定將 Kotlin 作為重點(diǎn)研究和學(xué)習(xí)的方向,并開(kāi)始定期舉辦內(nèi)部的學(xué)習(xí)和分享活動(dòng)。

[[352088]]

△ 電信營(yíng)業(yè)廳技術(shù)團(tuán)隊(duì)核心成員于谷歌開(kāi)發(fā)者大會(huì)。

左起: 付迎鑫 (電信營(yíng)業(yè)廳技術(shù)負(fù)責(zé)人)、劉峻宇 (電信營(yíng)業(yè)廳星播客項(xiàng)目經(jīng)理)、曾皓 (電信營(yíng)業(yè)廳 Android 項(xiàng)目經(jīng)理)、張熠 (電信營(yíng)業(yè)廳 Android 項(xiàng)目經(jīng)理)、黃森燊 (電信營(yíng)業(yè)廳 Android 開(kāi)發(fā)工程師)

但對(duì)開(kāi)發(fā)者們來(lái)說(shuō),感受一門(mén)語(yǔ)言最直接的方式,依然還是上手開(kāi)發(fā)。于是團(tuán)隊(duì)決定先在中國(guó)電信渠道中心的內(nèi)部應(yīng)用 "電渠報(bào)表" 中使用 Kotlin 作為主打開(kāi)發(fā)語(yǔ)言。

十分簡(jiǎn)潔的語(yǔ)法,對(duì) lambda 表達(dá)式的支持,以及充分考慮了現(xiàn)代編程需求的架構(gòu),讓團(tuán)隊(duì) "打開(kāi)了新世界的大門(mén)"。之后 Kotlin 很快就出現(xiàn)在了中國(guó)電信渠道中心的各個(gè)核心業(yè)務(wù)中,包括本文開(kāi)頭提到的電信營(yíng)業(yè)廳應(yīng)用,以及電信星播客應(yīng)用。

"目前來(lái)看,項(xiàng)目整體已經(jīng)有 20% 在使用 Kotlin,開(kāi)發(fā)新功能的話 50% 的代碼都是 Kotlin。"

—— 付迎鑫,電信營(yíng)業(yè)廳技術(shù)負(fù)責(zé)人

中国电信营业厅: 感受 Kotlin çš„ 加速度 

△ 用來(lái) "小試牛刀 的電渠報(bào)表應(yīng)用

 

開(kāi)得快,開(kāi)得穩(wěn)

其實(shí)很多時(shí)候,"快" 和 "穩(wěn)" 并不矛盾——疾馳的跑車(chē)如果時(shí)不時(shí)爆胎,那顯然也是跑不快的。

空指針異常 (NPE) 導(dǎo)致的崩潰 (或 ANR) 就是讓開(kāi)發(fā)者和用戶們沮喪的 "爆胎"。Kotlin 可以保護(hù)項(xiàng)目避免對(duì)可空類型進(jìn)行誤操作。如果類型檢測(cè)正確,編譯器還會(huì)進(jìn)行自動(dòng)類型轉(zhuǎn)換,NPE 的出現(xiàn)概率降低了 80% 之多,項(xiàng)目穩(wěn)定性和健壯性顯著提高,更為對(duì)接和展示各省返回的業(yè)務(wù)數(shù)據(jù)打下了良好的基礎(chǔ)。

Kotlin 的另一個(gè)關(guān)鍵新特性是協(xié)程,它是一個(gè)輕量級(jí)的線程,一個(gè)線程中可以創(chuàng)建任意個(gè)協(xié)程,線程的執(zhí)行和結(jié)束是由操作系統(tǒng)調(diào)度的,而協(xié)程可以讓開(kāi)發(fā)者手動(dòng)控制其執(zhí)行和結(jié)束。在項(xiàng)目中,團(tuán)隊(duì)會(huì)結(jié)合使用 Retrofit 和協(xié)程來(lái)處理網(wǎng)絡(luò)請(qǐng)求,從而更好地控制任務(wù)的執(zhí)行,這樣會(huì)比單純使用線程更加節(jié)省資源,也更加高效。在使用協(xié)程后,團(tuán)隊(duì)得以降低首頁(yè)各個(gè)頻道接口調(diào)用所需的資源,接口調(diào)用周期也更加可控。目前電信營(yíng)業(yè)廳的首頁(yè)和商城等核心頁(yè)面都是通過(guò) Kotlin 打造出流暢的使用體驗(yàn)。

Kotlin 的 "快" 還體現(xiàn)在對(duì)代碼的精簡(jiǎn)上。對(duì)于習(xí)慣了冗長(zhǎng) Java 代碼的 Android 開(kāi)發(fā)者來(lái)說(shuō),Kotlin 的 SAM (Single Abstract Method) 轉(zhuǎn)換一下子縮減大量的模版代碼可能會(huì)讓他們不太適應(yīng)——尤其是在通過(guò) lambda 表達(dá)式實(shí)現(xiàn) SAM 轉(zhuǎn)換的時(shí)候。但更簡(jiǎn)潔、更有可讀性的代碼無(wú)疑可以讓開(kāi)發(fā)者的注意力更容易集中在業(yè)務(wù)邏輯上,而不是冗長(zhǎng)的模版代碼上。

另一個(gè)能大量精簡(jiǎn)代碼的地方是控件綁定,以前在 Activity 中需要為綁定控件編寫(xiě)大量的代碼 (沒(méi)錯(cuò),就是 "findViewById")。引入 Jetpack View Binding 之后,ID 可以直接當(dāng)做變量使用,在 ViewBinding 推出之后,配合 Kotlin 能寫(xiě)出更加安全和簡(jiǎn)潔的代碼。

是時(shí)候看看遠(yuǎn)方的風(fēng)景了

使用 Kotlin 帶來(lái)的另一個(gè)好處,就是進(jìn)入 Android 平臺(tái)新功能的 "快車(chē)道"。

比如 Android 10 的時(shí)候平臺(tái)增加了對(duì)折疊屏設(shè)備的支持,但想要讓用戶在折疊/展開(kāi)設(shè)備時(shí)感覺(jué)流暢,免不了需要讓?xiě)?yīng)用妥善保存界面狀態(tài)和支持配置變更,用 Java 編寫(xiě)這種 "保存/讀取配置" 的工作雖然可行,但 Kotlin 的 lambda 解構(gòu)方式能夠幫助開(kāi)發(fā)者更加方便地對(duì)需要保存的實(shí)體類和相關(guān)配置進(jìn)行修改和讀取,代碼更加精簡(jiǎn),可讀性也更好。

△ 電信營(yíng)業(yè)廳的折疊態(tài)和展開(kāi)態(tài)

在 Android 支持 5G 之后,開(kāi)發(fā)團(tuán)隊(duì)可以通過(guò) ConnectivityManager 類拓展的新方法為 5G 用戶打造更加快速的網(wǎng)絡(luò)體驗(yàn)。對(duì)那些流量敏感的用例,也可以直接使用網(wǎng)絡(luò)連接 API 來(lái)檢測(cè)設(shè)備是否進(jìn)行了高帶寬連接,并能檢查連接是否計(jì)費(fèi)。這時(shí),開(kāi)發(fā)團(tuán)隊(duì)大量使用了 Kotlin 的局部委托屬性,使代碼更加清晰明了。

網(wǎng)絡(luò)連接 API

https://developer.android.google.cn/reference/android/net/ConnectivityManager

識(shí)別非計(jì)費(fèi)狀態(tài)

https://developer.android.google.cn/reference/android/net/NetworkCapabilities.html#NET_CAPABILITY_NOT_METERED

來(lái)自團(tuán)隊(duì)的經(jīng)驗(yàn)分享

從接觸、了解 Kotlin,到逐步嘗試,乃至正式采用,電信營(yíng)業(yè)廳技術(shù)團(tuán)隊(duì)總結(jié)了一些第一手的經(jīng)驗(yàn),這里和大家分享。

  • 在使用 Kotlin 前,首先要對(duì)項(xiàng)目組成員對(duì) Kotlin 的熟悉程度做一個(gè)簡(jiǎn)單的評(píng)估。對(duì)于新項(xiàng)目來(lái)說(shuō),需要對(duì)項(xiàng)目本身工作量進(jìn)行評(píng)估,如果時(shí)間規(guī)劃上比較充裕,可以考慮引入 Kotlin,這也可以讓開(kāi)發(fā)團(tuán)隊(duì)在實(shí)踐中更加了解 Kotlin;而對(duì)于老項(xiàng)目來(lái)說(shuō),就需要綜合考慮兼容性、穩(wěn)定性、維護(hù)性等其他相關(guān)因素。
  • 需要為兼容性相關(guān)問(wèn)題多預(yù)留一些解決時(shí)間,尤其是項(xiàng)目組成員對(duì) Kotlin 還不那么熟悉的時(shí)候。
  • 如果在開(kāi)發(fā)過(guò)程中發(fā)現(xiàn)最新的 Kotlin 需要升級(jí)到 AndroidX,需要慎重推進(jìn)。因?yàn)樯?jí) AndroidX 又會(huì)和很多第三方庫(kù)產(chǎn)生沖突,這時(shí)只能通過(guò)與第三方進(jìn)行協(xié)調(diào)來(lái)解決問(wèn)題。

"我們會(huì)繼續(xù)加大在 Kotlin 上的投入,目標(biāo)是在新項(xiàng)目中 100% 使用 Kotlin。"

—— 付迎鑫,電信營(yíng)業(yè)廳技術(shù)負(fù)責(zé)人

更簡(jiǎn)潔、更高效、更現(xiàn)代的 Kotlin,已經(jīng)讓電信營(yíng)業(yè)廳技術(shù)團(tuán)隊(duì)感受到了真實(shí)的 "加速度"。您是否已經(jīng)準(zhǔn)備好進(jìn)入 Android 開(kāi)發(fā)的 "快車(chē)道" 了呢?

 

 

責(zé)任編輯:張燕妮 來(lái)源: Google
相關(guān)推薦

2017-08-25 10:31:35

異業(yè)屬性常態(tài)化

2012-03-09 09:26:47

電信版iPhone 4S

2011-01-21 18:06:13

華為1588v2時(shí)鐘

2021-03-09 10:10:23

中國(guó)電信ZStack

2011-01-18 13:16:56

2011-01-21 10:07:51

2013-08-21 15:02:09

NECExpressClus

2010-12-27 14:02:53

2011-12-09 12:07:53

電信

2013-06-26 09:39:26

云平臺(tái)云資源管理ERP

2014-06-23 15:15:31

WiFi

2014-03-31 09:32:19

電信版三星GALAXY S5

2010-11-30 16:07:41

2013-02-01 18:18:43

Windows Ser中國(guó)電信案例

2009-08-31 16:12:41

中國(guó)電信軟件商店

2012-10-23 13:14:43

2020-10-18 11:11:27

5G

2013-11-18 14:03:17

世界通信展中國(guó)電信4G

2011-10-13 12:33:23

電信Wi-Fi
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)