学 Android 是一种什么样的体验?
转眼间 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
从集成开发环境和构建工具上面看,一两年前还在苟延残喘的 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
著名的 Support Library 已经更新到 25.0.0,其中 support-v4 库从 24.2.0 版本开始就拆分成 5 个子库,开发者可以更灵活的引用它。
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
至于 MVVM 模式,Android 官方提供了一个名为 DataBinding 函数库作为标准实现,相信后面会越来越多开发者在项目中引入。
如果你已经厌倦了使用 Java 来编写 Android 应用,没有关系,你可以尝试下 Kotlin,它可以比作 Android 世界的 Swift,目前已经发布了 1.0.4 版本,支持多种现代的编程特性,例如函数式编程。同时 100% 支持和 Java 的混合编程,具有 Java 编程基础的开发者很容易上手。
image_1avjccovrbrspjak8a1ajpr299.png-250kB
如果你也不喜欢 Kotlin,但熟悉 JavaScript 语言,那么推荐你试用下今年非常火爆的 React Native,它不仅可以使用 Javascript 语言编写 Android 应用,而且可以编写 iOS 应用,而且代码复用高达 80% 左右,同时,新功能的上线不再需要往应用市场提交新的 APK 包,而是支持在线热更新。当然,React Native 写出来的界面是 Native 的体验,不是 H5 的体验。
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
前面我们提到过 Kotlin 支持函数式编程,我的意思当然不是说使用 Java 语言就不能支持函数式的开发,但是就目前 Android 支持的 Java 版本,要支持函数式编程我们需要引入一个知名的函数库 RxJava,这是一个函数响应式编程框架,采用观察者设计模式,最直观的,它能让你的代码避免回调地狱的出现,使得代码数据流向非常清晰,在 Android 中使用 RxJava,还需要引入 RxAndroid 作为桥接,当然,还存在 RxBus,RxBinding 等等扩展函数库。
说起这两年 Android 开发的变化,你会发现热修复框架的如春笋般涌现,你之前可能知道 Dexposed,AndFix,Nuwa 等,但最近几个月出现的新美大 Robust,微信的 Tinker,手机 QQ 的 QFix 等方案你是否了解和对比过?
我们知道热修复是用来在线修复严重性的 bug,那么 Android Native 代码如何实现功能模块的在线更新呢?这就需要涉及插件化框架的概念了。Android 平台的插件化框架也是存在多种方案,各有优劣。常见的携程的 DynamicAPK,360 的 D www.gouyiyule.cn/ roidPlugin,iReader 的 ZeusPlugin 以及 Small 等。另外,插件化也是解决 64K 问题的一大利器。
另外一个和热修复容易混淆的概念是应用的增量更新,增量更新的意思是应用在自动更新时下载的 APK 不是全量的,而是一个差分包,下载完成合并后再进行安装,可以看到,热修复和增量更新最大的区别是应用更新后是否需要重新安装。
上面说到的热修复,插件化更新,增量更新,都依赖于应用启动后去服务端下载对应的更新包,那么如果应用启动时去读取本地缓存或者数据库等数据,由于文件损坏或者数据格式不正确,可能会导致应用启动必然闪退,因此,我们还需要引入启动保护机制来清除缓存数据从而保证应用可以正常启动。
对了,应用底层基础函数库也发生了很大变化,网络通信库 android-async-http 已不再是流行,OkHttp+Retrofit 是主流的选择,图片加载和缓存框架 Android-Universal-Image-www.hsl85.cn/Loader 也已经落伍了,Gwww.ycyc66.cn/ lide,Fresco 等是更优的选择。其他流行的底层函数库还有依赖注入框架 Dagger2,事件总线框架 EventBus,数据库 ORM 框架 greenDAO,就连日志记录函数库也涌现了不少,其中以 Timber,Hugo,logger 最有代表性。
2017 年还将会有哪些新技术或者新的变化出现呢?让我们拭目以待吧!
学 Android 是一种什么样的体验?的更多相关文章
- 在 2016 年学 JavaScript 是一种什么样的体验?
转 译者:方应杭 嘿,我最近接到一个 Web 项目,不过老实说,我这两年没怎么接触 Web 编程,听说 Web 技术已经发生了一些变化.听说你是这里对新技术最了解的 Web 开发工程师? 准确地说,我 ...
- 在 2016 年学 JavaScript 是一种什么样的体验?(React从入门到放弃)
jquery 年代 vs 前端模块化 http://blog.csdn.net/offbye/article/details/52793921 ++ 嘿,我最近接到一个 Web 项目,不过老实说,我这 ...
- coding game, 边打游戏边学编程,是一种怎么样的体验?
前言 hello,大家好,我是bigsai,好久不见,甚是想念! 在日常生活中,很多人喜欢玩游戏,因为游戏中有着对抗博弈.控制的喜悦,用灵魂指法完成一波靓丽的操作. 但实际上,你的按键都是对应代码中一 ...
- 学Android开发,入门语言java知识点
学Android开发,入门语言java知识点 Android是一种以Linux为基础的开源码操作系统,主要使用于便携设备,而linux是用c语言和少量汇编语言写成的,如果你想研究Android,就去学 ...
- DoNet屌丝学Android(一)——Android开发准备工作 & No HelloWord & (真机)调试
先乱扯淡一下吧,本人一.net屌丝,手持Android 4.2.2手机,Win7 x64本本,闲来无聊学习一下Android的开发,至于要开发啥玩意目前没有什么想法,就是想学学,搞不好是三分热度也有可 ...
- Android开发之三种动画
转载:http://www.cnblogs.com/angeldevil/archive/2011/12/02/2271096.html http://www.lightskystreet.com/2 ...
- 学Android开发 这19个开发工具助你顺风顺水
学Android开发 这19个开发工具助你顺风顺水 要想快速开发一个Android应用,通常会用到很多工具,巧妙利用这些工具,能让我们的开发工作事半功倍,节省大量时间,下面大连Android开发培训小 ...
- 从零開始学android<数据存储(1)SharedPreferences属性文件.三十五.>
在android中有五种保存数据的方法.各自是: Shared Preferences Store private primitive data in key-value pairs. 相应属性的键值 ...
- 独立开发一个App是一种怎样的体验?
(本文原文是我在知乎上写的一篇回答:独立开发一个 App 是一种怎样的体验?) UWP业余开发者表示,非常愿意做一股清流.在喧闹无比的iOS和Android平台,为了给应用造势,太多人费尽心思,勾心斗 ...
随机推荐
- 长沙Uber优步司机奖励政策(2月1日~2月7日)
滴快车单单2.5倍,注册地址:http://www.udache.com/ 如何注册Uber司机(全国版最新最详细注册流程)/月入2万/不用抢单:http://www.cnblogs.com/mfry ...
- UVA 10557 XYZZY
Problem D: XYZZY ADVENT: /ad�vent/, n. The prototypical computer adventure game, first designed by W ...
- Clojure学习资料
以下大部分收藏自博客:http://blog.csdn.net/ithomer/article/details/17225813 官方文档: http://clojure.org/documentat ...
- Spring Aop实现方式总结
前面两个文章介绍了Aop及其相关重要概念,下面主要用代码的方式介绍下实现Spring Aop的几种方式 1. 基于注解实现Spring Aop 业务类接口 package cn.test.busine ...
- java树状结构之二叉树
参考:http://blog.csdn.net/zhangerqing/article/details/8822476 前面已经提到过树和二叉树的相关概念内容,下面主要来介绍下关于二叉树的创建,遍历, ...
- Java通过代理server上网
完整代码 package com.proj.net; //导入编码的jar文件 import it.sauronsoftware.base64.Base64; import java.io.Buffe ...
- MATLAB中导入数据:importdata函数
用load函数导入mat文件大家都会.可是今天我拿到一个数据,文件后缀名竟然是'.data'.该怎么读呢? 我仅仅好用matlab界面Workspace区域的"import data&quo ...
- proxy 出现乱码问题解决 lua
ngx.req.set_header("Accept-encoding", ""); 加上这句 解除乱码 压缩问题造成的乱码
- GO的跨平台数扰类型
基本数据类型的包装: 1.跨平台,用于移植 2.不同的框架类型包装的类型(MFC ,WIN32SDK,C) 3.基本数据类型的组装成的结构体 4.宏定义 数字类型 Go 也有基于架构的类型,例如:in ...
- 字符集详解 ------------------------ UNICODE +UTF8
http://my.oschina.net/goldenshaw/blog?catalog=3294521 http://my.oschina.net/goldenshaw/blog?catalog= ...