在 2016 年学 Android 是一种什么样的体验?

作者简介:ASCE1885, 《Android 高级进阶》作者。

  • 微信公众号:asce1885
  • 小密圈:Android高级进阶,详情见这篇文章
  • Github简书微博CSDN 知乎
    本文由于潜在的商业目的,不开放全文转载许可,谢谢!
white_beard.png-475.8kB
white_beard.png-475.8kB

转眼间 2016 年的电量已不足 20%,不禁感慨 How Time Flies!不知不觉 Android 移动开发已经走过了八年的光阴,在这八年的时间中,Android 开发从最初的简单调用系统 API,到各类框架的不断涌现,再到如今的成熟阶段,那么作为一个想在 2016 年开始学习 Android 或者重新开始学习 Android 的开发者来说,你将看到一幅什么样的光景呢?

首先你会发现最新的 Android 系统版本已经是 7.0,作为大版本肯定存在很多变化和改进,开发者需要持续跟进这些变化,例如 Android 7.0 删除了三个隐式广播,优化内存使用和优化电量消耗。再往前一个版本,Android 6.0 重新设计了权限系统,一系列的权限不再简单的在 AndroidManifest.xml 文件中声明就可以使用,而是要动态申请。再往前一个版本,Android 5.0 引入了 Material Design,从此 Android 有了自己特有的设计语言和规范。

image_1avj9nk461qdajmb17c315fm9bm29.png-172.7kB
image_1avj9nk461qdajmb17c315fm9bm29.png-172.7kB

从集成开发环境和构建工具上面看,一两年前还在苟延残喘的 eclipse+ant 基本绝迹了,取而代之的是流行的 Android Studio +Gradle,截至本文发稿前,Android Studio 刚刚发布了 2.2.2 版本,对应的 Gradle 版本为 2.14.1 版本。谈到 Android 的构建,除了 Gradle,你也可以尝试 Facebook 的 Buck,虽然它的配置侵入性很强,但构建速度是比 Gradle 快很多的,当然,如果使用最新的 Android Studio+Gradle,我们可以开启 Instant Run 模式,从而达到快速的重新构建。

image_1avj8ih4oe1m1rjgqg41pqg19vn1f.png-184.5kB
image_1avj8ih4oe1m1rjgqg41pqg19vn1f.png-184.5kB

著名的 Support Library 已经更新到 25.0.0,其中 support-v4 库从 24.2.0 版本开始就拆分成 5 个子库,开发者可以更灵活的引用它。

image_1avj91p8i19betnn1ld42t01uc61s.png-88kB
image_1avj91p8i19betnn1ld42t01uc61s.png-88kB

什么?你还在使用 ListView,GridView?是时候使用 RecyclerView 进行替换了,同时别忘了使用 Support Library 24.2.0 开始引入的 DiffUtil 来高效更新 RecyclerView。

从搭建应用的UI架构开始,我们不再考虑 MVC 模式,取而代之以 MVP 或者 MVVM 模式,Android 官方虽然对于 MVP 模式没有统一的标准,但还是提供了一系列使用例子 供开发者作为实现参考。

image_1avj8ceqa6uc1ffr14fc1dgp10qg12.png-83.5kB
image_1avj8ceqa6uc1ffr14fc1dgp10qg12.png-83.5kB

至于 MVVM 模式,Android 官方提供了一个名为 DataBinding 函数库作为标准实现,相信后面会越来越多开发者在项目中引入。

如果你已经厌倦了使用 Java 来编写 Android 应用,没有关系,你可以尝试下 Kotlin,它可以比作 Android 世界的 Swift,目前已经发布了 1.0.4 版本,支持多种现代的编程特性,例如函数式编程。同时 100% 支持和 Java 的混合编程,具有 Java 编程基础的开发者很容易上手。

image_1avjccovrbrspjak8a1ajpr299.png-250kB
image_1avjccovrbrspjak8a1ajpr299.png-250kB

如果你也不喜欢 Kotlin,但熟悉 Javascript 语言,那么推荐你试用下今年非常火爆的 React Native,它不仅可以使用 Javascript 语言编写 Android 应用,而且可以编写 iOS 应用,而且代码复用高达 80% 左右,同时,新功能的上线不再需要往应用市场提交新的 APK 包,而是支持在线热更新。当然,React Native 写出来的界面是 Native 的体验,不是 H5 的体验。

image_1avjddbak1obhc9nrd76tq1p0mm.png-46.2kB
image_1avjddbak1obhc9nrd76tq1p0mm.png-46.2kB

提起 React Native,我们不得不提到它的竞争者 Weex,Weex 的基本原理和 React Native 一致,也是使用 Javascript 语言编写 Android 和 iOS 应用,不同的是,React Native 是基于 React 框架,Weex 是基于 Vue 框架。当然,目前看来,React Native 的势头是盖过 Weex 的。

image_1avji66pflkivkj1sr8rvg1v0m9.png-258.8kB
image_1avji66pflkivkj1sr8rvg1v0m9.png-258.8kB

前面我们提到过 Kotlin 支持函数式编程,我的意思当然不是说使用 Java 语言就不能支持函数式的开发,但是就目前 Android 支持的 Java 版本,要支持函数式编程我们需要引入一个知名的函数库 RxJava,这是一个函数响应式编程框架,采用观察者设计模式,最直观的,它能让你的代码避免回调地狱的出现,使得代码数据流向非常清晰,在 Android 中使用 RxJava,还需要引入 RxAndroid 作为桥接,当然,还存在 RxBus,RxBinding 等等扩展函数库。

说起这两年 Android 开发的变化,你会发现热修复框架的如春笋般涌现,你之前可能知道 Dexposed,AndFix,Nuwa 等,但最近几个月出现的新美大 Robust,微信的 Tinker,手机 QQ 的 QFix 等方案你是否了解和对比过?

我们知道热修复是用来在线修复严重性的 bug,那么 Android Native 代码如何实现功能模块的在线更新呢?这就需要涉及插件化框架的概念了。Android 平台的插件化框架也是存在多种方案,各有优劣。常见的携程的 DynamicAPK,360 的 DroidPlugin,iReader 的 ZeusPlugin 以及 Small 等。另外,插件化也是解决 64K 问题的一大利器。

另外一个和热修复容易混淆的概念是应用的增量更新,增量更新的意思是应用在自动更新时下载的 APK 不是全量的,而是一个差分包,下载完成合并后再进行安装,可以看到,热修复和增量更新最大的区别是应用更新后是否需要重新安装。

上面说到的热修复,插件化更新,增量更新,都依赖于应用启动后去服务端下载对应的更新包,那么如果应用启动时去读取本地缓存或者数据库等数据,由于文件损坏或者数据格式不正确,可能会导致应用启动必然闪退,因此,我们还需要引入启动保护机制来清除缓存数据从而保证应用可以正常启动。

对了,应用底层基础函数库也发生了很大变化,网络通信库 android-async-http 已不再是流行,OkHttp+Retrofit 是主流的选择,图片加载和缓存框架 Android-Universal-Image-Loader 也已经落伍了,Glide,Fresco 等是更优的选择。其他流行的底层函数库还有依赖注入框架 Dagger2,事件总线框架 EventBus,数据库 ORM 框架 greenDAO,就连日志记录函数库也涌现了不少,其中以 Timber,Hugo,logger 最有代表性。

2017 年还将会有哪些新技术或者新的变化出现呢?让我们拭目以待吧!

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,126评论 6 481
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,254评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 152,445评论 0 341
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,185评论 1 278
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,178评论 5 371
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,970评论 1 284
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,276评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,927评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,400评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,883评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,997评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,646评论 4 322
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,213评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,204评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,423评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,423评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,722评论 2 345

推荐阅读更多精彩内容