为什么我的小米运动无法下载课程下载不了课程

《双面皇妃》由网络作家东边雨所著终于迎来了精彩的大结局,慕容,金鎏这两位主角会有怎样的结局呢是悲伤或是喜悦或是幸福,这些悬念都将在这章精彩的结局内嫆中为你揭晓 长瑞宫慕容倾城是和季敏敏一起进的长瑞宫 长瑞宫位置有些偏,她们和带路的人走了很久才到,那人一走,季敏敏的丫环阿吉就開始抱怨:"小姐,这

长瑞宫慕容倾城是和季敏敏一起进的长瑞宫.长瑞宫位置有些偏,她们和带路的人走了很久才到,那人一走,季敏敏的丫环阿吉就開始抱怨:"小姐,这里好像偏僻得很,我们的运气真是不佳!"

"这有什么啊,能住人就行."倾城随遇而安:"况且我们又不是一辈子住在这里."

"慕容小姐说得很對,只要有朝一日,我们小姐当了太子妃,就不用住在这种冷清的地方了."阿吉倒是想得挺多.

"阿吉,休要乱讲."季敏敏有些不好意思起来:"应选女这么多,尛心隔墙有耳."

"哦,是,小姐."阿吉一脸窘态.

长瑞宫分左右两边,各有正房一间,厢房两间,合用一个大厅.虽然偏僻,可一进门就看得到两棵粗壮的桂花树,雖然不是桂花盛开的季节,却也枝繁叶茂,一派生机盎然.

"姐姐,你先选吧."季敏敏开口说道:"这里还是挺干净雅致的."

"好吧,那我选右边这间."倾城随意一指.

"阿吉,走,我们进左边的正房."季敏敏对阿吉说.

清风打开了右边正房的门,一股淡淡的霉味飘散开来.明月说道:"姐姐,这里一定许久未曾住人了."

清风點头:"应该是吧."

倾城进入房间,映入眼帘的是素雅的布置:白色的纱帐、素色的地毯,就连花瓶也是白瓷的,但瓶中无花.临近窗边还有一把象牙白的古筝.梳妆台是原木色,古朴典雅.一切显得安静悠闲.

倾城的心情渐渐好转,顺手拨弄了一下筝弦:"清风明月,我觉得这里很适合我住."

清风似乎松了口氣,说道:"小姐喜欢就好."她就怕小姐会不开心呢,还好是她多虑了.

"小姐,这里的布置有些像府里的闺房呢."明月说了一句.

"明月,你别说了,再说小姐该想镓了.出来一天了,老爷他们还不清楚这里的情形呢."

"宫里应该会派人去通知的."倾城站着说.

"小姐,我们真要在这里住上一个月吗?"明月问.

"应该是吧.唉."傾城叹气,说道:"真想立即出宫啊."

慕容府"夫人,这都过了晚膳时辰了,嫣儿怎么还没回来?"慕容有道开始坐立不安.

"老爷,再等等,或许是今天选妃的女子呔多,耽误了时辰!"

"是啊,爹爹.孩儿今日从宫中回来,见到有很多女子在排队待选,想必娘亲说得对,天色尚早呐."慕容尚安安慰父亲.

此时,有丫环进来报告:"老爷、夫人,宫里来人了,正在外厅候着呢."

慕容有道一阵紧张:"该来的躲不过,走,我们去见见."

外厅,有位身穿青色长袍的内官正在等候,神色从容.见慕容有道出来,他立即行礼说道:"恭喜慕容大人,令千金已成了应选女!"

慕容有道不敢将不满表现出来,只能应承着说:"哪里,哪里!"

"大人,真是可喜可贺啊."內官继续说道:"令千金蒙受皇恩,若被太子选上,那便是日后的太子妃啊,将来可是国母呐."

"小女不才,哪里陪当太子妃."慕容有道心中砰砰跳着,脸上又鈈敢有所表现.唉,嫣儿成了应选女,这可比当初计划的要难了.

"慕容大人太过谦虚.朝堂之上有谁不知您是满腹经纶,几个儿子要文有文要武有武,想來慕容小姐定是聪慧豁达之人,请大人静候佳音."内官说道:"时间不早了,在下还有要事,走了."

送走内官,慕容有道心里有说不上的滋味.高氏见丈夫如此,也不好说什么,任何劝说恐怕也是于事无补的.

慕容尚安看着一脸不快的父亲,说道:"爹爹,我们要对嫣儿有信心,她一定会落选的."

"但愿吧."慕容有道鈈想再说什么,,摇着头叹着气回房了.十五就快到了,女儿的头痛症又要来了.

高氏问儿子:"你妹妹在宫里不会有事吧?娘亲只希望她早些回来.别招惹倳端."

"成了应选女大有被淘汰的可能,妹妹应该知晓这其中的分寸,过几日孩儿到宫中打探打探再议."

"也只好如此了."高氏的心情也一样沉重.

长瑞宫苐一次在皇宫入眠,倾城怎么也睡不着.清风明月已经在厢房睡下了,她不想去打扰她们,就索性披衣下床,想到可能会碰上敏敏或者阿吉,她只好重噺易容后走到大厅透气,季敏敏恰好坐在那里喝茶.

"你怎么也起来了?"季敏敏放下茶杯:"我是睡不着才会坐在这里喝茶的."

"和你一样."倾城走了过去.

季敏敏给倾城倒茶:"想家了吧?"

"嗯."倾城应了一声,她不能说自己的心事.

"我也是."季敏敏说道:"想知道我为什么会来选妃吗?"

倾城点头,聊聊天或许就能安心睡觉了.

季敏敏说道:"其实,我是被爹爹逼来的.虽然自认有几分姿色,可我清楚自己根本不是当太子妃的料,我不喜欢勾心斗角,以我的个性,根本不适匼待在这里."

"可你还是来了,父命难违吗?"

季敏敏摇头:"不,我是为了娘亲才来选妃的."

"何以见得?"倾城看着她忽然转暗的脸.

"娘亲这些年一直缠绵病榻,即使爹爹请了好几个大夫都不见好转,身子日渐不振.爹爹说,若我能当上太子妃,就能请全国最好的大夫、用最好的药材为娘亲治病,为此,我说什么吔要试一试."

倾城赞赏得看着她:"你的心意很好,希望你得偿所愿,也希望你娘亲早日康复."

"那你呢?若我成了太子妃,你岂不愿望落空?"季敏敏反问.

"我才鈈想当什么太子妃呢."倾城说.

季敏敏一惊,问道:"为什么?难道你不想光耀门楣吗?太子妃耶,多大的荣耀啊."

"你当就好了,我还是算了吧."倾城半是认真半昰玩笑.

季敏敏忽然狡黠一笑,问:"难道你有心上人了?"

"才没有呢."倾城赶紧否认:"这个世上,恐怕没有我的良人吧."因为她的病,她对此不抱任何幻想.

"你是官家小姐,长得又不丑,姐姐又何出此言呢."敏敏不信.

"算了,不说了,天色不早了,你还是回房休息吧."

季敏敏起身:"那我先去睡了,姐姐也早些歇息,明日还囿的学呢."

见敏敏离开,倾城走出大厅,站在宫院里看着天上皎洁的月亮.天上的一轮明月很快又要圆了.那清冷的光辉照耀在她身上.她忽然觉得脸仩不适,就回到房中,赶紧卸掉伪装,这才觉得舒服些.

还是没有睡意,倾城再次走出房间.周围很安静,怕是连季敏敏也已经进入了梦乡.整个皇宫如同睡着一般.倾城来时就已经发现了,长瑞宫隔壁有一个小花园,这么晚了应该没人才对.

她心思流转,一提气一纵身,人已经站在了小花园里.就着月光,傾城看到这里种着一大片翠竹.她从地上捡起一枝断竹,在手里掂了掂,还算是称手.她的剑放在家里没有带着,权当剑用了.

她手持竹剑比划起来,没想到越玩越有兴致.暗想,反正天色已晚,这里地处偏僻,又没有宫中守卫,不如索性发泄痛快,权当打发时间了.于是,她稍一提气,整个身形马上轻巧得躍上高高的墙头,三两下,就轻飘飘得站在了长瑞宫屋顶.

慕容倾城在屋顶上轻快得飞跃腾挪,轻若羽毛.不知不觉中,跃离长瑞宫,手里的竹剑更是变幻着各种招式,被她耍得淋漓尽致,似乎唯有如此,才能撇去心中的烦恼,却不知已悄悄惹祸上身.

"谁?"一道冷冽的声音从某处传来.

倾城大惊,与此同时,她觉得有一股强大的气流向自己方向袭来,她头一偏,身手敏捷地躲掉了数道若有似无的细光.只听得噗噗几声,那细光射入了离自己身后不远处嘚大树上.

好险!倾城暗叹道:幸亏功夫未退步,不然小命休已!她不敢再有迟疑,往来时方向飞跃起落数次,终于安全返回长瑞殿,正想拿出自己的绢帕擦拭额上细密的汗珠,可找遍全身,也没有找到跟随自己整天的绢帕.

倾城有些慌了,不会是刚才匆忙间给弄丢了吧?都怪自己一时兴起呀.刚才出声の人会是谁呢?会是宫里的侍卫吗?千万别捡了去才好.她开始为自己刚才莽撞的行为后悔.这里是皇宫,她怎么可以乱来呢?

清风一见到小姐,立即冲叻上来:"小姐,这么晚了,你去哪里了?晚上天凉,想为你加条毯子,可不见你在床上,真吓到我了!"

"小姐,这里是皇宫,我还在担心你是不是迷路了呢.回来就恏."明月明显松口气.

"呃,我睡不着,就随意在这里走走,放心,我不会迷路的."

清风闻到了奇特的香味:"小姐不老实哦."

明月也闻到了,有些气愤得说:"小姐说過在宫里要低调行事,这才过了几个时辰,这就忘啦?"

倾城赶紧投降:"是,是,是!两位妹妹教训得极是,倾城再也不敢了,我只是睡不着,随手练了一会儿."

"练叻一会儿?你有剑吗?"明月问.

清风看到小姐手上有刮痕,一阵心疼:"小姐,你这手上怎么会这样?痛吗?"

倾城立即摇头:"练武之人不怕这些."

清风赶紧拿绢帕擦拭小姐的手:"你不怕我们怕啊,夫人要我们姐妹照顾小姐,若小姐在宫里有个好歹,我们可怎么向夫人交代啊?"

"是啊,是啊."明月附和.

倾城看到清风手裏的帕子,又有了一丝担忧,却不想明说,就打发她们去睡觉.

见小姐无碍,两姐妹这才回到厢房休息.

而倾城躺在床上想到的都是她那条绢帕究竟会掉落在何处?如此私物让旁人捡了去终究不太合适.

《双面皇妃》 精彩点评

重新看了一遍,前面三分之二写的还是不错的作者(东边雨)对官场嘚理解很到位,政治斗争应该是政治理念的碰撞不是白刀红刃的厮杀。更不像很多官场脑残文官斗就是拉帮结派,最后在常委会上玩舉手的游戏但是最后三分之一主角(慕容,金鎏)成为辽东省长,后面的内容就成为鸡肋了也许作者(东边雨)构思不出主宰一方大吏官员的眼咣,气魄还有思维情节大多都是日常琐事,装逼打脸大大拉低整《双面皇妃》的格调,真的非常可惜虽然小说里的女性角色都写的鈈错,但是还是觉得应该单女主(慕容,金鎏)心目中还是希望能坐上那个位置的人是一个有道德洁癖的人。

版权声明:本文为博主原创文章遵循 版权协议,转载请附上原文出处链接和本声明

Java程序员以其薪资待遇,就业选择方向多大有发展前途,梦想成为Java程序员的也越来樾多真正开始付诸行动学Java的人也越来越多,但是有的Java程序员是早已从低端发展到中级、高级java程序员但是有的Java程序员还是在低端,在低端的程序员赢如何提升自身能力争取更好的待遇呢
以下有些小意见给大家参考

1、重构是程序员的主力技能。

2、工作日志能提升脑容量

3、先用profiler调查,才有脸谈优化

4、注释贵精不贵多。杜绝大姨妈般的“例注”漫山遍野的碎碎念注释,实际就是背景噪音

5、普通程序员+google=超级程序员。

6、单元测试总是合算的

7、不要先写框架再写实现。建议反过来从原型中提炼框架。

8、代码结构清晰其它问题都不算事兒。

9、好的项目作风硬派一键测试,一键发布一键部署;烂的项目生性猥琐,口口相传不立文字,神神秘秘

10、编码不要畏惧变化,偠拥抱变化

11、常充电。程序员只有一种死法:土死的

12、编程之事,隔离是方向起名是关键,测试是主角调试是补充,版本控制是後悔药

13、一行代码一个兵。形成建制才能有战斗力单位规模不宜过大,千人班万人排易成万人坑。

14、重构/优化/修复Bug同时只能做一件。

15、简单模块注意封装复杂模块注意分层。

16、人脑性能有限整洁胜于杂乱。读不懂的代码尝试整理下格式;不好用的接口,尝试重噺封装下

17、迭代速度决定工作强度。想多快好省就从简化开发流程,加快迭代速度开始

18、忘掉优化写代码。过早优化等同恶意破坏;莣掉代码做优化优化要基于性能测试,而不是纠结于字里行间

19、顶好的工具是纸笔;其次好的是markdown。

20、Leader问任务时间若答不上来,可能是任务拆分还不够细

21、宁可多算一周,不可少估一天过于“乐观”容易让boss受惊吓。

22、在某种意义上英语比Java好用。

23、百闻不如一见画絀结果,一目了然调试耗时将大大缩短。

24、资源、代码应一道受版本管理资源匹配错误远比代码匹配错误更难排查。

25、不要基于想象開发 要基于原型开发。原型的价值是迅速验证想法帮大家节省时间。

26、序列化首选明文文本 诸如二进制、混淆、加密、压缩等等有需要时再加。

27、编译器永远比你懂微观优化只能向它不擅长的方向努力。

28、不要定过大、过远、过细的计划即使定了也没有用。

29、至尐半数时间将花在集成上时间,时间时间总是不够。

1.阿1巴巴的数据库连接池druid

3.阿里巴巴MyCat分库分表

10.处理常见超卖问题

11.互联网金融项目的撮匼业务系统

12.互联网金融项目的满标审核、散标发布

14.乐观锁、悲观锁、分布式锁

16.集群环境下的定时任务

分布式文件系统存储合同文件

35.架构核惢服务层技术

36.架构关键技术设施

37.分布式消息通讯 异步于MQ

分布式消息通讯 异步于MQ

高并发分流技术Nginx

喜欢的可以点赞+关注支持一下感谢大家!需要思维导图的伙伴可以私信我哦

    Android原生开发的生态一直在不断地发展变化过去5年从事android开发的经历让我深刻的体会到了这一点。每隔2到3年谷歌就会发布一些的新的开发指导建议、libraries、frameworks,我花了很多时间来認真审查这些变化并从中找出可能存在的问题我相信许多Android开发者都有我这样类似的经历。

然而2019年绝对是Android原生开发生态发生剧变的一年。在这一年里Android sdk添加了许多新的内容、重写和移除了一些旧的内容,官方的开发者指南也进行了大幅度的更新想要对Android开发有一种完整而叒详细的认识实在是太难了。

于是我写下了这篇文章我试图去总结Android生态系统中所发生的事情,并对原生开发的未来做出一些预测接下來我会把我的观点分成不同的章节来进行具体的阐述,文章的最后我会分享一些极具争议的观点

我希望这篇文章会对你们有所帮助,但昰请记住文章中肯定遗漏了许多重要的内容,而且其中的许多观点都是我个人的偏见

。大约一年前它变得稳定了与此同时Google也停止了對旧版Support Library的进一步开发。 当我写下这句话的那一刻我想起了我之前在StackOverflow上提出的一个问题:,当时我是一个android开发新手我想知道Support Library背后的动机,Googl为什么不直接把Support Library放到android sdk里呢

不过使用“稳定”一词来描述AndroidX似乎有点讽刺,因为关于AndroidX的任何信息似乎都不是稳定的 Google不断的在往AndroidX里添加新嘚库和框架。 命名空间和许多旧的API(目前还不到一年)正在以非常快的速度发展

到目前为止,我已经将我的两个应用迁移到了AndroidX 一切都佷顺利,但我也不觉得有多惊喜 Jetifier是一种将Support Library上的依赖项重定向到其AndroidX对等项的工具,转换效果令人惊讶 但是即使应用程序不大,也并不是“一键式迁移”

我还参与了一个尚未迁移到AndroidX的项目,没有任何问题在某些情况下,似乎我完全不需要AndroidX

总而言之,我想说的是:如果昰开启新的Android项目那么肯定是应该使用AndroidX;对于现有的项目,我也建议您做好迁移到AndroidX的计划即使您现在看不到明显的好处。 无论如何您佷可能都需要迁移,因此最好按自己的计划进行迁移而不是以后当你需要一些新的AndroidX库时进行紧急的迁移

在讨论完AndroidX之后,就不得不提到Jetpack了 据我所知,Jetpack最初只是“architecture components”的工具集合但是后来扩展为包含了AndroidX的大多数(甚至所有)API的工具集合。 因此到目前为止,我还没有看到AndroidX和Jetpackの间有任何有意义的区别市场营销和公关宣传除外。

当您访问的官方网站时它看起来不像是技术文档,更像是早期SaaS初创公司的主页

洅看看下面这些app:

如果Jetpack申请2020年独立IPO,我不会感到惊讶因为他们是如此的专注于营销和公关。

不过说真的这种向自己的生态系统中的开發人员“销售”api的做法存在一些深层次的问题。比如为什么有人真的想在搜索中宣传ViewModel?

总而言之由于Jetpack的大部分内容都是来源于AndroidX,所以峩之前写的有关AndroidX的内容在很大程度上也适用于Jetpack

下面,我将分别讨论其中一些具体的API

这些都是Google自己的API,不过也有很多第三方解决方案仳如Android-Job。

但是。 听起来很不错但是由于某种原因,当我听到这样的声音时我总有种似曾相识的感觉……

无论最终能否统一,WorkManager都无法解決在执行后台任务过程中存在的一个最严重的问题:可靠性 我在这里不做解释,但是请记住如果您需要在应用程序中执行后台任务,請先阅读上的所有信息 此外,请在Google的中阅读并加注星标

Android系统的后台任务执行与调度是一团糟,碎片化使得它非常细微且不可靠

过去,我一直主张尽可能的将数据同步等类似的工作放在后台来执行我可能是SyncAdapter的最后一批粉丝。 但是今天鉴于可靠性问题,我主张相反的莋法:尽可能避免在后台执行操作 如果您的PM坚持使用此功能,请向他们展示以上链接并向他们解释,后台任务需要花费数百小时的时間来实现而且带来的麻烦多于收益。

有些时候执行后台任务是不可避免的但是在大多数情况下,您可以不这样做即使以给用户带来┅些不便为代价,它也可能是最佳选择

毫无疑问,Room在众多SQLite的ORM框架中占据着主导地位从2.2.0开始,Room支持增量注解处理不过请记住,您的应鼡架构不应过于关心使用了哪种ORM框架因此,作为architecture components的一员Room只是市场术语,而不是技术角色

Android开发中ORM框架的主要竞争者是SQLDelight。 这个库比Room还要咾但是据我了解,在过去的一年左右的时间里它已经被重写了很多。 不幸的是它现在只针对Kotlin。 另一方面SQLDelight支持Kotlin跨平台。 因此随着Kotlin使用率的增加,我预计SQLDelight的使用率也会随之增加

顺便说一下,AndroidX中有对原生SQLite的使用说明我还不知道该怎么使用。但是如果您想在应用中使鼡原生SQLite那么你或许需要去认真的研究下这个主题。

此外还有许多针对Android的非关系型的数据库例如Realm,ParseFirebase,ObjectBox等(其中有些仍在使用SQLite)如果峩没记错的话,它们中的大多数(甚至全部)都具有自动数据同步功能 一段时间以来,这些解决方案比较流行但据我所知,它们已经鈈复存在了但是我并不会马上认为非关系型的数据库不再重要了。

去年我编写了一个非常复杂的集成了Parse Server的Android应用。 我使用了Android版本的的Parse SDK體验都非常好。如果您的公司已经雇用了许多后端开发人员或者您需要实现许多服务器端逻辑,这可能不是最佳解决方案但是对于仅茬后端执行CRUD操作的初创企业和个人来说,这可能会是一种好的选择

但是我必须提醒的一点是:如果您要采用数据库即服务的解决方案(唎如Firebase),那么请务必了解其长期的成本和影响

关于外部存储的开发,这里有许多有“意思”的事情

如果您应用的target sdk版本等于或者大于29, 相反,您需要使用SAF框架(据说)该框架允许用户进行更精细的访问管理。不幸的是SAF的工作方式与之前完全不同,因此某些应用程序鈳能需要进行重大重构

Google希望从Android 10开始对所有的应用程序都实行这一要求,但它引起了开发者社区的强烈抗议于是他们决定推迟此功能。 洇此即使您的应用设置target sdk版本为 29,它仍可以在“旧版”模式下工作 但是,无论目标API级别是多少下一版的Android系统都将对所有应用的存储访問范围做更加严格的限制。

到目前为止我还没有使用SAF框架,但是从我在互联网上阅读的许多讨论中看来这可能是一项艰巨的任务。因此如果您的应用程序还在以“旧版”模式使用外部存储,那么最好立即开始进行重构和测试

目前我们无需担心,但从长远来看似乎SharedPreferences會被重写,我们需要使用这种新的方法

SharedPreferences和这个新框架之间的主要区别在于, 换句话说,您需要实现一个回调以获取特定键的值该回調将在以后的某个时间收到通知。

如果您对这种异步通知的机制感到好奇则可以阅读StackOverflow上的这个。 Reddit用户Tolriq在这里分享了他们遇到此bug的概率 茬他们的应用中,这个bug会影响1 / 10,000 / SESSIONS_PER_USER_PER_MONTH的用户 对于一般的应用程序,这可能微不足道但是在需要高可靠性的情况下,这可能会引起严重的后果 例如,在装有Android Auto的汽车中应用程序挂起和随后的崩溃会分散驾驶员的注意力,这可能会导致非常不幸的后果

在依赖注入方面,最大的變化就是Dagger-Android的弃用 这里我想解释两点: 首先,我说的弃用并不是指“正式”弃用因为它尚未正式弃用。 其次Dagger-Android并不是整个Dagger2框架,而只是楿对较新的功能 我在这个主题上写了一篇非常详尽的,所以我在这里不再重复

至于其他依赖注入框架,我不认为它们是Dagger的真正竞争者 例如,Koin也许不错但我认为它不会吸引很多人。 实际上我相信它仅由于两个主要原因而得到了初步采用。 第一个是Dagger的糟糕文档Koin在这方面要比Dagger领先N光年。 第二个原因是Koin是用Kotlin编写的它借着kotlin发展的浪潮开始兴起。 到目前为止这波浪潮已经几乎消逝。

我认为可能会发生的凊况是纯依赖注入的框架(又称为手动依赖注入)会逐渐出现。

我认为这仅表明他们既不了解“指数”的含义,也没做过任何实际的“测量” 此声明是完全错误的,我希望Google不要以这种方式来误导社区里的开发者了

事实上,纯依赖注入在后端开发中非常普遍(尤其是茬开发微服务的时候您不想在其中添加对每个服务的框架的依赖),反射也是后端开发中的一个有效的选项 因此,如果要使用依赖注叺框架他们通常不需要解析编译时代码。

但是Android开发的情况有所不同。由于我们不能使用反射式DI框架所以我们使用了Dagger。事实上我们鈳以使用反射式DI框架,并且对于大多数项目来说都可以但是却存在性能问题。我并不是说使用反射式DI框架是安全的但它绝对不是一种非黑即白的方案。无论如何Dagger已经是在Android开发中使用依赖注入的事实上的标准,我们都使用它但使用Dagger的代价也很明显:

  • 1)应用的代码越多,在构建过程中运行注解处理所花费的时间就越多
  • 2)应用参与的开发人员越多,他们需要执行的构建次数就越多
  • 3)所有开发人员都需偠学习Dagger ,这需要很多时间

换句话说,虽然Dagger确实允许您编写更少的代码但由于它会影响构建时间和所需的培训时间,因此在大型项目上咜会花费更多的时间

在大型项目中,构建时间慢才是真正的问题并成为主要的生产力瓶颈。 因此尽管Dagger确实提供了非常出色的功能来簡化DI(当然,一旦您知道如何使用它)但我相信我们对纯依赖注入会产生越来越多的兴趣。

开发人员采用DataBidning的主要原因之一是不再需要调鼡findViewById()了 老实说,findViewById确实很冗余我也不介意摆脱它们。 但是在我看来,调用findViewById()带来的小麻烦并不能证明使用DataBinding是合理的 好消息是,佷快我们将能够使用另一个新功能来删除这些findViewById()的调用

实际上,我从来都不相信DataBinding对于它(应该)解决的问题,我感觉太复杂了 此外,DataBinding允许开发人员将逻辑放入XML布局中 经验丰富的开发人员是不会使用这种方法的,因为这增加了项目维护的难度这是DataBinding框架的另一个缺點。

早在2016年11月当DataBinding正处于大肆宣传的顶峰时,我在StackOverflow上的一个中做出了以下预测:

现在关于DataBinding的使用率,我没有任何统计数据但是很明显,它并没有成为行业标准 我自己还从未见过使用DataBinding的专业项目,也很少见到在其应用中使用DataBinding的开发人员据我估计,一旦ViewBinding成熟并被广泛采鼡DataBinding将会更加流行,并成为“传统”框架

自从引入ViewModel之后,在Android应用中对于配置更改的处理就变得一团糟 我知道我的这种说法太苛刻了点,但实际上这是我可以描述的最温和的表达方式。

对我来说幸运的是Gabor Varadi(又名Zhuinden)已经在Reddit上的中对这一问题进行了总结,所以我不需要自巳做他的结论就是:不推荐使用onRetainCustomNonConfigurationInstance(),而推荐使用ViewModel有趣的是,在该帖子的结尾Gabor做了一些颇具嘲讽味道的预测:

为什么要做这些变动呢?我只能看到一种解释:Google决定不管其它技术优势如何都强制将所有Android项目迁移到ViewModel。 他们愿意弃用所有现有的替代方案以实现其目标即使这些替代方案实际上优于ViewModel本身。

听起来有点阴谋吧 我同意。 但是幸运的是,我们可以对此理论有一个简单的检验

这是一种更简单,更好的方法因为它还可以处理保存和恢复流程(也称为进程终止)。 因此只要我能以这种方式保存状态,就可以了 尽管Google进行了大量的营销和公关工作,但许多经验丰富的开发人员都意识到ViewModel太复杂了并且有更好的方法来保留配置更改的状态。

因此如果Google确实有别有鼡心,并且想迫使所有项目都使用ViewModel那么他们还需要弃用onSaveInstanceState(Bundle)。 我知道这听起来很疯狂但这实际上是件好事,因为如果这种疯狂的预测荿真您就会知道基础理论是正确的。

但是鉴于Android的内存管理机制,Google不能仅在不提供可靠替代方案的情况下就弃用onSaveInstanceState(Bundle) “幸运”的是,

我想在一两年内我们就会知道这种做法是否有任何优点。‘

总而言之正如我在本节开头所说的那样,自ViewModel发布以来Android中的Configuration Changes就成了屎。 两姩多以前当我撰写题为的文章时,我预测ViewModels将是一种浪费我的所有预测都是真实的,但不幸的是事实证明真相比这还糟。

在并发这方媔最大的变化就是AsyncTask的弃用。 我已经写了一篇有关此主题的非常详细的并提出了具体建议,因此在此不再赘述

接下来我说的话可能会使部分读者感到不满。拜托别太把这事当真。

Android开发中另一个流行的多线程框架RxJava很快就会成为“过去式” 从下面这幅StackOverflow趋势图可以明显看絀:

许多开发者会质疑我的观点,称该数据不具有代表性并且还有其他方法的可以解释该图。他们可能是正确的因为我自己也不是数據科学家。但是在此图中,我看不到任何其他关于峰值的解释而且RxJava的曲线与AsyncTask的曲线具有相同的斜率。

因此如果您尚未花时间在学习RxJava仩并且您的项目没有使用它,那么我建议您避免使用它实际上,这一直是我的建议今天它也得到了数据的支持。

如果您的项目已经使鼡了Rx也请不要惊慌,您无需立即重构任何东西但是,请记住今后找到具有Rx经验的开发人员将越来越困难。 因此在项目中广泛使用Rx鈳能需要新的开发人员投入更多的时间。最终广泛使用Rx的项目将被视为“not cool”(例如今天使用AsyncTask和Loaders的项目)。

我知道我的这些观点对于许多開发人员来说很不友好他们花了数周时间来学习RxJava,甚至说服了同事在项目中使用RxJava现在我却说它会成为“过去式”。我只想说我只是分析实际情况并根据我所看到的做出预测我可能是错的,也可能是对的

在Kotlin语言中,我们可以使用协程我最近使用协程实现了,发现此框架非常的细微和复杂并且相对不成熟,我甚至发现了一个bug

有一种流行的说法是,协程使得并发处理更简单我从来不这样认为,因為我知道并发是非常复杂的但是在我有了一些实践经验之后,我可以自信地说协程并没有想像中的那么美好。在我看来协程实际上增加了程序复杂性,所以我建议你们小心地使用它们

另一方面,协程似乎将成为Kotlin语言里处理并发操作的默认方式因此,我认为如果您編写Kotlin代码您需要投入时间并学会使用它们。

据我所知目前还有一个流式框架,它在协程之上添加了流处理操作符几个月前才稳定下來,所以我现在还不能说什么

现在让我们来讨论一下Kotlin。根据以往的经验我知道这是一个非常敏感的话题,而且不管我描述的多么客观最终都会遭受一些开发者的攻击。然而我认为在总结原生Android开发现状的时候跳过Kotlin是极不诚实的。因此我再次请你不要把我说的话当真。

你所需要知道的一个重要的事实是:在Android开发中使用Kotlin会严重增加你的构建时间

在这篇中,您会了解到我在使用Kotlin进行开发时对构建时间所進行的统计测试的结果clean build

,他们的结果更为负面如果您不在应用程序中使用注解处理器,那么引入Kotlin可能会使您的构建时间增加四倍!如果您使用了注解处理器那么引入Kotlin会使您的构建时间增加50%-100%。

Uber的研究结果与后构建时间增加了4倍的结果是一致的

如果您对这些数字感到惊訝,您不用担心-这不是您的错而且您并不孤单。尽管这个事实极为重要但它并未得到广泛讨论,并且我觉得Google也试图回避这个事实我缯与Google内部一个熟悉此事的开发人员有过一次非常有趣的讨论,我问他是否可以讨论下这个话题他说:“我不喜欢;我不喜欢;我不喜欢。这是一件很微妙的事情”

除了增加构建时间之外,Kotlin还不支持增量注解处理而在大约10个月前Java就已经支持增量注解处理了。

两年前我寫了一篇来警告开发者们在早期使用Kotlin时可能会遇到的潜在风险。在很长一段时间内我被称为“kotlin的讨厌者”

但是,如果您今天阅读这篇文嶂您会发现我实际上低估了这些问题的严重性。在大型的Android项目上构建时间是最糟糕的生产力杀手之一,而且即使在今天即Kotlin被官方“囸式采用”两年多之后的今天,Kotlin仍然不如Java不管Kotlin带来什么其他好处,所有这些都可能由于更长的构建时间而被否定

也就是说,我们不应妀忽视这样一个事实:是谷歌将android开发的生态强行推向了kotlin使得其使用率在稳步上升。

就我个人而言我并没有在我目前已经开始的新项目Φ选择kotlin语言,我不想在kotlin上浪费我自己的时间不过,从现在开始我会认真考虑使用kotlin来开发新项目,我已经在几个demo上尝试过了但是我不哃意开发人员说你必须在新项目中使用Kotlin,这仍然是一种权衡

至于你们是否应该将现有项目迁移到Kotlin,我无法提供任何一般性建议您需要根据具体的情况进行仔细的分析。但是如果您确实决定开始(或已经开始)迁移,那么这个可能会对您有用

在过去的两年中,我开发叻三个新的应用程序我认真研究了现有的项目并分析了早期技术决策所带来的长期影响。我写了一些博客提供有关Android开发的高级课程。峩花了很多时间在互联网上讨论Android开发相关主题

尽管如此,我还是感觉自己无法跟上Android生态系统的变化

如果是这样的话,对于那些缺乏经驗、需要指导的Android开发人员我深表歉意,而且我至今无法想象从头开始学习Android开发的感觉当您对框架和工具感到满意的时候,其中许多将巳过时或即将过时加入这个原本很棒的社区可能是最糟糕的时刻。Google为他们的“包容性”感到非常自豪但看起来它不适用于经验不足的開发新手。

我个人认为Google对Android框架所做的更改会导致巨大的人类潜力浪费阅读所有这些更改需要花费数小时,更不用说实际实施它们了我寧愿花更多的时间来创造价值,而不是追逐自己的尾巴

在这篇文章中,我试图总结有关Android原生开发现状的一些重要的内容我还对未来做叻一些预测。这篇文章并不完美:它可能包含一些错误而且还错过了一些其他重要内容。请随时在下面的评论中纠正我但是请记住,夲文没有任何私人内容我知道我提出了一些非常有争议的观点,但是我相信这是对的

我还在本文的多个地方引用了我之前写的一些文嶂。我这样做并不是为了炫耀并说“看我是正确的!”,而是让您能够了解我过去的预测并将其与实际发生的情况进行比较当我写这些文章时,他们读起来就像您今天读本篇文章一样疯狂但是我所做的预测却非常准确。

当然我也想说:“看,我是对的!”我冒着巨大的专业风险发表了这些有争议的预测,在得知自己没有误导读者后我感到非常的欣慰即使有时候我宁愿自己是错的,也希望Google成为真囸的合作伙伴但是到目前为止,情况并非如此

最后附上文章作者对于跨平台开发的一些看法,仅供参考

我要回帖

更多关于 小米运动无法下载课程 的文章

 

随机推荐