kotlin 用协程做网络请求_中国电信营业厅: 感受 Kotlin 的 quot;加速度quot;

"我们手上是一个很成熟的项目,所以毫无疑问需要保留 Java 代码,目前只会在新开发的页面中使用 Kotlin,并已经感受到了它带来的便利。随着功能的迭代,我们相信更多的功能会转而使用 Kotlin。"—— 付迎鑫,电信营业厅技术负责人
中国电信电子渠道运营中心,属于中国电信三大主渠道之一,负责电信线上渠道的管理与运营。电信营业厅 app 则是中国电信线上渠道的主要入口。目前该应用的注册用户超过 2 亿,月活跃用户接近 6,000 万,月交易额在 10 亿以上。

电信营业厅应用的技术团队所面临的挑战,基本都和 "速度" 有关:

  • 电信营业厅 app 不是简单的工具应用,而是中国电信在线服务的官方品牌,并基于这个定位打造成了包括电商、互联网直播、阅读、音乐、影视、游戏、资讯、生活服务、公益事业的综合服务平台。要确保如此繁多的功能都流畅稳定地运行,对技术团队的开发效率都有十分高的要求。

  • 庞大的用户群体也使得应用运行的硬件和平台十分多样,技术团队需要跟得上用户们更换新设备、更新操作系统的速度。

  • 大型应用自然也会有庞大的历史资产,一旦需要对这些资产进行迭代,也需要尽可能降低时间成本。

而 Kotlin 带来的 "加速度",则让开发团队切实感受了一把 "推背感"。

第一脚油门总是需要慎重

2017 年上海,开发团队在谷歌开发者大会上了解到 Kotlin 技术框架已经日趋成熟,在看到很多主流应用纷纷开始使用 Kotlin 之后,团队便决定将 Kotlin 作为重点研究和学习的方向,并开始定期举办内部的学习和分享活动。7872e727f7787d247912c06501b59b1d.png

△ 电信营业厅技术团队核心成员于谷歌开发者大会。

左起: 付迎鑫 (电信营业厅技术负责人)、刘峻宇 (电信营业厅星播客项目经理)、曾皓 (电信营业厅 Android 项目经理)、张熠 (电信营业厅 Android 项目经理)、黄森燊 (电信营业厅 Android 开发工程师)但对开发者们来说,感受一门语言最直接的方式,依然还是上手开发。于是团队决定先在中国电信渠道中心的内部应用 "电渠报表" 中使用 Kotlin 作为主打开发语言。十分简洁的语法,对 lambda 表达式的支持,以及充分考虑了现代编程需求的架构,让团队 "打开了新世界的大门"。之后 Kotlin 很快就出现在了中国电信渠道中心的各个核心业务中,包括本文开头提到的电信营业厅应用,以及电信星播客应用。
"目前来看,项目整体已经有 20% 在使用 Kotlin,开发新功能的话 50% 的代码都是 Kotlin。"—— 付迎鑫,电信营业厅技术负责人

bdf1bb291c7d5d5e941855531521b9e7.png

△ 用来 "小试牛刀 的电渠报表应用

开得快,开得稳

其实很多时候,"快" 和 "稳" 并不矛盾——疾驰的跑车如果时不时爆胎,那显然也是跑不快的。空指针异常 (NPE) 导致的崩溃 (或 ANR) 就是让开发者和用户们沮丧的 "爆胎"。Kotlin 可以保护项目避免对可空类型进行误操作。如果类型检测正确,编译器还会进行自动类型转换,NPE 的出现概率降低了 80% 之多,项目稳定性和健壮性显著提高,更为对接和展示各省返回的业务数据打下了良好的基础。Kotlin 的另一个关键新特性是协程,它是一个轻量级的线程,一个线程中可以创建任意个协程,线程的执行和结束是由操作系统调度的,而协程可以让开发者手动控制其执行和结束。在项目中,团队会结合使用 Retrofit 和协程来处理网络请求,从而更好地控制任务的执行,这样会比单纯使用线程更加节省资源,也更加高效。在使用协程后,团队得以降低首页各个频道接口调用所需的资源,接口调用周期也更加可控。目前电信营业厅的首页和商城等核心页面都是通过 Kotlin 打造出流畅的使用体验。7937e063779dcc216523d37cb2af9eba.png401d33e6759e87beb89633db1a2cd4af.png△ 电信营业厅应用的首页和商城页面Kotlin 的 "快" 还体现在对代码的精简上。对于习惯了冗长 Java 代码的 Android 开发者来说,Kotlin 的 SAM (Single Abstract Method) 转换一下子缩减大量的模版代码可能会让他们不太适应——尤其是在通过 lambda 表达式实现 SAM 转换的时候。但更简洁、更有可读性的代码无疑可以让开发者的注意力更容易集中在业务逻辑上,而不是冗长的模版代码上。另一个能大量精简代码的地方是控件绑定,以前在 Activity 中需要为绑定控件编写大量的代码 (没错,就是 "findViewById")。引入 Jetpack View Binding 之后,ID 可以直接当做变量使用,在 ViewBinding 推出之后,配合 Kotlin 能写出更加安全和简洁的代码。

是时候看看远方的风景了

使用 Kotlin 带来的另一个好处,就是进入 Android 平台新功能的 "快车道"。

比如 Android 10 的时候平台增加了对折叠屏设备的支持,但想要让用户在折叠/展开设备时感觉流畅,免不了需要让应用妥善保存界面状态和支持配置变更,用 Java 编写这种 "保存/读取配置" 的工作虽然可行,但 Kotlin 的 lambda 解构方式能够帮助开发者更加方便地对需要保存的实体类和相关配置进行修改和读取,代码更加精简,可读性也更好。

a8227b7b62b73c80c3659344ec0a1e5a.gif△ 电信营业厅的折叠态和展开态在 Android 支持 5G 之后,开发团队可以通过 ConnectivityManager 类拓展的新方法为 5G 用户打造更加快速的网络体验。对那些流量敏感的用例,也可以直接使用网络连接 API 来检测设备是否进行了高带宽连接,并能检查连接是否计费。这时,开发团队大量使用了 Kotlin 的局部委托属性,使代码更加清晰明了。
  • 网络连接 APIhttps://developer.android.google.cn/reference/android/net/ConnectivityManager
  • 识别非计费状态https://developer.android.google.cn/reference/android/net/NetworkCapabilities.html#NET_CAPABILITY_NOT_METERED

来自团队的经验分享

从接触、了解 Kotlin,到逐步尝试,乃至正式采用,电信营业厅技术团队总结了一些第一手的经验,这里和大家分享。

  • 在使用 Kotlin 前,首先要对项目组成员对 Kotlin 的熟悉程度做一个简单的评估。对于新项目来说,需要对项目本身工作量进行评估,如果时间规划上比较充裕,可以考虑引入 Kotlin,这也可以让开发团队在实践中更加了解 Kotlin;而对于老项目来说,就需要综合考虑兼容性、稳定性、维护性等其他相关因素。

  • 需要为兼容性相关问题多预留一些解决时间,尤其是项目组成员对 Kotlin 还不那么熟悉的时候。

  • 如果在开发过程中发现最新的 Kotlin 需要升级到 AndroidX,需要慎重推进。因为升级 AndroidX 又会和很多第三方库产生冲突,这时只能通过与第三方进行协调来解决问题。

"我们会继续加大在 Kotlin 上的投入,目标是在新项目中 100% 使用 Kotlin。"—— 付迎鑫,电信营业厅技术负责人

更简洁、更高效、更现代的 Kotlin,已经让电信营业厅技术团队感受到了真实的 "加速度"。您是否已经准备好进入 Android 开发的 "快车道" 了呢?

c10ae3172341df29d60b9c93bc618fab.png

推荐阅读

76861707de7c53f7299ad52669c6dc76.png78246eb8d13bfdc6a9d243637cc190bf.png23fd39e69906b8dfa99874672f3bf1b9.pngbebc790d071ca6c0a286081eea5cc221.gif 点击屏末  | 查看更多开发者精彩故事

c2df937a8ee79fe1a455774e01f6c16c.png

9014626d14bff42ef21c04cb5fb28848.gif

cd791e82f1e8fc0385b30f4ea06bec40.png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/571407.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

拖动验证码插件

拖动验证码插件 效果图: 在验证前,提交弹出验证失败,验证后弹出验证成功。 文件结构: css: #drag{ position: relative;background-color: #e8e8e8;width: 300px;height: 34px;line-height: 34px;text-align: center; …

matlab padarray函数零,matlab padarray函数

1padarray功能:填充图像或填充数组。用法:B padarray(A,padsize,padval,direction)A为输入图像,B为填充后的图像,padsize给出了给出了填充的行数和列数,通常用[r c]来表示。padval表示填充方法。它的具体值和描述如下…

[知了堂学习笔记]_网络基础知识_1.OSI参考模型(网络七层协议)

OSI参考模型是国际标准化组织ISO制定的模型,把计算机与计算机之间的通信分成七个互相连接的协议层,如图: 1.1各层功能 1、物理层 最底层是物理层,这一次负责传送比特流,它从第二层数据接收数据帧,并将帧的结…

Linux版本配置环境变量,如何linux环境下配置环境变量过程图解

jdk下载地址:在linux环境下的root同级目录下配置software目录将下载好的jdk上传到software文件夹里面(我使用的操作软件是)到software这个目录下.输入命令:cd /software输入命令:ll就可以看到我们的jdk包解压文件解压命令 tar xzvf jdk-8u111-linux-x64.tar.gz解压之…

奔腾双核linux服务器,Dell推出双核心奔腾服务器

来自业内的消息,Dell近日推出了一台采用Intel双核心 Pentium D的服务器,这将给小型服务器带来更强的运算能力。Dell PowerEdge SC430 主要面向小型企业客户,价格在499美元起。相比PowerEdge SC420,Dell为 PowerEdge SC430 装配了两…

EasyPlayerPro Windows流媒体播放器(RTSP/RTMP/HTTP/HLS/File/TCP/RTP/UDP都能播)发布啦

EasyPlayerPro简介 EasyPlayerPro是一款全功能的流媒体播放器,支持RTSP、RTMP、HTTP、HLS、UDP、RTP、File等多种流媒体协议播放、支持本地文件播放,支持本地抓拍、本地录像、播放旋转、多屏播放等多种功能特性,核心基于ffmpeg,稳…

ALSA声卡笔记2---ASoC驱动框架

1、简单了解一下ASOC 在嵌入式系统里面的声卡驱动为ASOC(ALSA System on Chip) ,它是在ALSA 驱动程序上封装的一层 分为3大部分,Machine,Platform和Codec ,三部分的关系如下图所示:其中Machine是指我们的…

python之路_自定义属性、json及其他js补充

一、自定义属性 我们知道,在前端页面渲染的过程中,我们可能会需要用到一些后端传来的参数,这种参数的获取我们一般是通过模板语言渲染得到。但是当这些参数是在js文件中被用到(js代码若是单独以文件形式被引用,模板语言…

C语言打印日历总结报告,C语言打印日历

应同学的要求,写了个日历,输入年份,输出12个月份的日历表,代码如下 :#includebool isLeap(int year){if((year%40 && year%100!0) || (year%4000))return 1;elsereturn 0;}void printCalendar(int year){int d…

java中二进制怎么说_面试常用:说清楚Java中synchronized和volatile的区别

回顾一下两个关键字:synchronized和volatile1、Java语言为了解决并发编程中存在的原子性、可见性和有序性问题,提供了一系列和并发处理相关的关键字,比如synchronized、volatile、final、concurren包等。2、synchronized通过加锁的方式&#…

qt用c语言编程 pdf下载文件,Qt 使用Poppler实现pdf阅读器的示例代码

开发环境 Qt5.5.1、Qt Creator 3.5.1Qt实现pdf阅读器和MFC实现pdf阅读器,其实原理都是差不多的。注意:这个是MinGW版本的Qt,也就是运行在GCC环境下的库,里面只包含 *.dll 和 *.a 。如果是Vistual Studio版本的Qt ,那么…

C语言工厂方法模式,工厂函数模式 (C语言实现)

工厂模式属于创建型模式,大致可以分为三类,简单工厂模式、工厂方法模式、抽象工厂模式。二. 工厂方法模式所谓工厂方法模式,是指定义一个用于创建对象的接口,让子类决定实例化哪一个类。Factory Method使一个类的实例化延迟到其子…

光绘文件 c语言 解析,AltiumDesigner输出光绘文件

1、钻孔信息生成设置打开PCB文件,放置钻孔位图符号对应的孔大小的列表:切换到DrillDrawing层放置字符串,Place->string(PS),此时按Tab键,在出现的Text文本框中点击下拉箭头,选择.Legend,OK。…

曼哈顿距离最小生成树与莫队算法(总结)

曼哈顿距离最小生成树与莫队算法(总结) 1 曼哈顿距离最小生成树 曼哈顿距离最小生成树问题可以简述如下: 给定二维平面上的N个点,在两点之间连边的代价为其曼哈顿距离,求使所有点连通的最小代价。 朴素的算法可以用O(N…

功能引导 android,Flutter实现App功能引导页

App功能介绍页,主要是由介绍app功能的几张图片和当前页指示符组成,如下效果我们来一步一步实现上面的界面,左右滑动切换显示功能页,这个可以通过PageView来实现,底部的指示符半透明覆盖在PageView上,开发过Android同学知道可以用Framelayout布局来实现&a…

ocp oracle 考试报名_获得Oracle认证对拓展职业前景的影响

知识就是力量通过考试和考试成绩固然很重要,但您在学习过程中所掌握的知识才是您职业成功的坚实基础。在备考过程中,获得的知识和经验才是您真正的财富。Oracle Certified Associate (OCA):专员级别的认证能够证明学员具备基本技能&#xff0…

mac android 录屏软件下载,苹果录屏app下载 苹果录屏 for Android V2.1.3 安卓手机版 下载-脚本之家...

苹果录屏是一款不错的手机录屏软件,该软件能帮助你录制流畅清晰视频,实现屏幕内容实时同步录制,录制视频流畅清晰不卡顿,需要的朋友可以下载使用。应用介绍苹果录屏,是一款免费屏幕录制软件,能帮助你录制流…

火箭技术术语_仿真优化火箭发动机 3D 打印制造工艺

台湾工业技术研究院(ITRI)为台湾创新空间(TiSPACE)提供增材制造(也称 3D 打印技术)服务,包括原始设计制造、重新设计和仿真等。TiSPACE 的固液火箭发动机中使用的燃料喷射器组件的 3D 打印过程为:首先,激光将第一层粉末熔化并融合到构建板上&…

车林通购车之家--购车计算器模块--保险

//car-calculator-bx.twig {{ include(jsq-nav.twig) }} <div class"switch-item active" id"bodya"><div class"top-layer2 clearfix"><div class"tit"><span>新车保险市场价</span></div><…

麒麟710f能否升级到鸿蒙系统,定了!麒麟710以上支持升级鸿蒙系统,荣耀也可以升级...

原标题&#xff1a;定了&#xff01;麒麟710以上支持升级鸿蒙系统&#xff0c;荣耀也可以升级华为Mate X2发布会上&#xff0c;余承东表示4月份推送手机版鸿蒙系统&#xff0c;距离首发日期越来越近。不少朋友关心&#xff0c;哪些机型支持鸿蒙系统&#xff0c;荣耀手机可以更新…