在线客服
Android高级进阶图书
人气:49

Android高级进阶

本书从基础、架构、安全、性能优化、新技术、测试等角度,通过简单的代码示例详尽地展示了 Android 开发技巧

内容简介

本书是Android的进阶学习指南,主要为Android初中级开发者进阶所需的知识,高级开发者也可以从本书中发现很多共鸣点。本书从8个方面对50个知识点进行分类讲解,包括基础篇、系统架构篇、经验总结篇、新技术篇、性能优化篇、移动安全篇、工具篇、测试篇。熟练掌握这些知识点后,应该就能够应付实际项目开发中的绝大部分问题了。 本书的主要目的在于给读者一个完整的Android中高级开发者知识图谱。笔者希望通过本书的系统讲解,能够帮助读者在面试和工作中收获自己满意的成绩。

编辑推荐

本书从基础、架构、安全、性能优化、新技术、测试等角度,通过简单的代码示例详尽地展示了 Android 开发技巧

本书作者技术基础深厚扎实,是新技术的探索和追逐者,他对于技术发自内心地热爱, 是业界非常的 Android 架构师

本书是作者在一线互联网企业工作多年的经验沉淀,从不同角度对 Android 新技术抛砖引玉,由浅入深,将实战中的案例抽象成原型,通俗易懂

本书对于技术的解读朴实风趣,深入浅出,是 Android 工程师的进阶宝典,腾讯、华为、阿里、百度、平安科技等一线移动开发工程师联袂推荐

作者简介

顾浩鑫,网络 ID:ASCE1885,平安金融科技移动研发工程师,目前主要从事 Android & React Native 相关研发工作,毕业于华中科技大学图像识别与人工智能研究所,曾先后就职于华为、百度、平安科技。

目录

第1篇基础篇

第1章Android触摸事件传递机制

1.1触摸事件的类型

1.2事件传递的三个阶段

1.3View的事件传递机制

1.4ViewGroup的事件传递机制

第2章Android View的绘制流程

2.1绘制的整体流程

2.2MeasureSpec

2.3Measure

2.4Layout

2.5Draw

第3章Android 动画机制

3.1逐帧动画(Frame Animation)

3.1.1XML 资源文件方式

3.1.2代码方式

3.2补间动画(Tween Animation)

3.2.1插值器 Interpolator

3.2.2AlphaAnimation

3.2.3ScaleAnimation

3.2.4TranslateAnimation

3.2.5RotateAnimation

3.2.6自定义补间动画

3.3属性动画(Property Animation)

3.3.1Evaluator

3.3.2AnimatorSet

3.3.3ValueAnimator

3.3.4ObjectAnimator

3.4过渡动画(Transition Animation)

第4章Support Annotation Library 使用详解

4.1Nullness 注解

4.2资源类型注解

4.3类型定义注解

4.4线程注解

4.5RGB 颜色值注解

4.6值范围注解

4.7权限注解

4.8重写函数注解

4.9返回值注解

4.10@VisibleForTesting

4.11@Keep

第5章Percent Support Library使用详解

第6章Design Support Library使用详解

6.1Snackbar

6.2TextInputLayout

6.3TabLayout

6.4NavigationView

6.4.1导航菜单

6.4.2导航头部

6.5FloatingActionButton

6.5.1使用浮动操作按钮

6.5.2其他选项

6.5.3点击事件

6.6CoordinatorLayout

6.7CollapsingToolbarLayout

6.8BottomSheetBehavior

第7章Android Studio中的NDK开发

7.1ABI的基本概念

7.2引入预编译的二进制 C/C 函数库

7.3直接从 C/C 源码编译

7.3.1配置 ndk.dir 变量

7.3.2在 Gradle 中配置 NDK 模块

7.3.3添加 C/C 文件到指定的目录

7.4使用 .so 文件的注意事项

7.4.1使用高平台版本编译的 .so 文件运行在低版本的设备上

7.4.2混合使用不同的C 运行时编译的 .so 文件

7.4.3没有为每个支持的 CPU 架构提供对应的 .so 文件

7.4.4将 .so 文件放在错误的地方

7.4.5只提供 armeabi 架构的 .so 文件而忽略其他 ABIs 的

第8章Gradle 必知必会

8.1共享变量的定义

8.2通用配置

8.3aar 函数库的引用

8.4签名和混淆的配置

第9章通过Gradle打包函数库到JCenter和Maven Central

9.1Maven Central 和 JCenter

9.1.1Maven Central

9.1.2JCenter

9.2Android Studio 获取函数库的原理

9.3上传函数库到 JCenter

9.3.1步骤一:在 Bintray 网站上注册一个账号

9.3.2步骤二:创建一个 Sonatype 账号

9.3.3步骤三:在 Bintray 网站使能自动签名

9.3.4步骤四:生成 POM 相关的信息

9.3.5步骤五:上传函数库到 Bintray

9.3.6步骤六: Bintray 用户仓库到 JCenter

9.3.7步骤七:同步函数库到 Maven Central

第10章Builder模式详解

10.1经典的 Builder 模式

10.2Builder 模式的变种

10.3变种 Builder 模式的自动化生成

10.4开源函数库的例子

第11章注解在 Android 中的应用

11.1注解的定义

11.2标准注解

11.2.1编译相关注解

11.2.2资源相关注解

11.2.3元注解

11.3运行时注解

11.4编译时注解

11.4.1定义注解处理器

11.4.2注册注解处理器

11.4.3android-apt插件

第12章ANR产生的原因及其定位分析

12.1ANR 产生的原因

12.2典型的 ANR 问题场景

12.3ANR 的定位和分析

12.3.1Logcat 日志信息

12.3.2traces.txt 日志信息

12.4ANR的避免和检测

12.4.1StrictMode

12.4.2BlockCanary

第13章Android异步处理技术

13.1Thread

13.2HandlerThread

13.3AsyncQueryHandler

13.4IntentService

13.5Executor Framework

13.6AsyncTask

13.7Loader

13.8总结

第14章Android数据序列化方案研究

14.1Serializable

14.2Parcelable

14.3SQLiteDatabase

14.4SharedPreferences

14.5JSON

14.6Protocol Buffers及Nano-Proto-Buffers

14.7FlatBuffers

第15章Android WebView Java 和 JavaScript 交互详解

15.1Java 调用 JavaScript

15.2JavaScript 调用 Java

第2篇系统架构篇

第16章MVP模式及其在Android中的实践

16.1MVP 的基本概念

16.2MVP 与 MVC 的区别

16.3MVP 的开源实现

16.3.1Android-Architecture

16.3.2TODO-MVP

16.3.3TODO-MVP-Loaders

16.3.4TODO-MVP-Clean

16.3.5TODO-Databinding

16.3.6其他开源参考实现

16.4MVP 的好处

16.5MVP 存在的问题

第17章MVVM模式及Android DataBinding实战

17.1Data Binding 表达式

17.2数据对象

17.3数据绑定

17.4事件绑定

第18章观察者模式的拓展:事件总线

18.1为何要使用

18.2原理

18.3开源实现

18.3.1EventBus

18.3.2otto

18.4与观察者模式及 Android 广播的区别

第19章书写简洁规范的代码

19.1Java 编码规范

19.1.1源代码文件的定义

19.1.2源代码文件的结构

19.1.3遵循的格式

19.1.4命名约定

19.1.5Javadoc

19.2Android 命名规范

19.2.1布局文件的命名

19.2.2资源文件的命名

19.2.3类的命名

19.3CheckStyle 的使用

第20章基于开源项目搭建属于自己的技术堆栈

20.1APP 的整体架构

20.2技术选型的考量点

20.3日志记录能力

20.4JSON 解析能力

20.4.1gson

20.4.2jackson

20.4.3Fastjson

20.4.4LoganSquare

20.5数据库操作能力

20.5.1ActiveAndroid

20.5.2ormlite

20.5.3greenDAO

20.5.4Realm

20.6网络通信能力

20.6.1android-async-http

20.6.2OkHttp

20.6.3Volley

20.6.4Retrofit

20.7图片缓存和显示能力

20.7.1BitmapFun

20.7.2Picasso

20.7.3Glide

20.7.4Fresco

20.7.5Android-Universal-Image-Loader

第3篇经验总结篇

第21章64K方法数限制原理与解决方案

21.164K 限制的原因

21.2使用 MultiDex 解决 64K 限制的问题

21.2.1Android 5.0 之前的版本

21.2.2Android 5.0 及之后的版本

21.3如何避免出现 64K 限制

21.4配置 MultiDex

21.5MultiDex Support Library 的局限性

21.6在开发阶段优化 MultiDex 的构建

第22章Android 插件框架机制研究与实践

22.1基本概念

22.1.1宿主和插件

22.1.2ClassLoader 机制

22.2开源框架

22.2.1android-pluginmgr

22.2.2dynamic-load-apk

22.2.3DynamicAPK

22.2.4DroidPlugin

22.2.5Small

第23章推送机制实现原理详解

23.1推送的开源实现方案

23.1.1基于 XMPP 协议

23.1.2基于 MQTT 协议

23.2推送的第三方平台

23.3自己实现推送功能

23.3.1长连接的建立(TCPConnectThread)

23.3.2数据的发送(TCPSendThread)

23.3.3数据的接收(TCPReceiveThread)

23.3.4心跳包的实现(TCPHeartBeatThread)

第24章APP 瘦身经验总结

24.1APP 为什么变胖了

24.2从 APK 文件的结构说起

24.3优化图片资源占用的空间

24.3.1无损压缩 [ImageOptim]

24.3.2有损压缩 [ImageAlpha]

24.3.3有损压缩 [TinyPNG]

24.3.4PNG/JPEG 转换为 WebP

24.3.5尽量使用 NinePatch 格式的 PNG 图

24.4使用 Lint 删除无用资源

24.5利用 Android Gradle 配置

24.5.1minifyEnable

24.5.2shrinkResources

24.5.3resConfigs

24.5.4ndk.abiFilters

24.6重构和优化代码

24.7资源混淆

24.8插件化

第25章Android Crash 日志收集原理与实践

25.1Java 层 Crash 捕获机制

25.1.1基本原理

25.1.2线程信息

25.1.3SharedPreference 信息

25.1.4系统设置

21.1.5Logcat 中的日志记录

25.1.6自定义 Log 文件中的内容

25.1.7MemInfo 信息

25.2Native 层 Crash 捕获机制

25.3Crash 的上报

第4篇新技术篇

第26章函数式编程思想及其在Android中的应用

26.1代码的简化

26.2Operators 简介

第27章依赖注入及其在Android中的应用

27.1基本概念

27.1.1构造函数注入

27.1.2Setter 函数注入

27.1.3接口注入

27.2为何需要框架

27.3开源框架的选择

27.3.1ButterKnife

27.3.2RoboGuice

27.3.3Dagger

27.3.4Dagger2

27.3.5框架的对比

第28章Android世界的Swift:Kotlin在Android中的应用

28.1选择 Kotlin 的原因

28.2Kotlin 的安装和配置

28.3Kotlin 语言的特性

28.3.1可表达性

28.3.2空类型安全

28.3.3扩展函数

28.4Kotlin 的 Gradle 配置

28.5将 Java 类转换成 Kotlin 类

28.6相关资料

第29章React Native For Android入门指南

29.1环境配置

29.1.1Homebrew

29.1.2nvm

29.1.3Node.js

29.1.4watchman

29.1.5flow

29.2Android 开发环境的要求

29.3React Native 工程配置

29.3.1安装react-native

29.3.2生成工程

29.4Android Studio 工程概览

29.5React Native 依赖库修改为本地

在线预览

1.1触摸事件的类型

触摸事件对应的是MotionEvent类,事件的类型主要有如下三种。yyACTION_DOWN:用户手指的按下操作,一个按下操作标志着一次触摸事件的开始。yyACTION_MOVE:用户手指按压屏幕后,在松开之前,如果移动的距离超过一定的阈值,那么会被判定为ACTION_MOVE操作,一般情况下,手指的轻微移动都会触发一系列的移动事件。

yyACTION_UP:用户手指离开屏幕的操作,一次抬起操作标志着一次触摸事件的结束。在一次屏幕触摸操作中,ACTION_DOWN和ACTION_UP这两个事件是必需的,而ACTION_MOVE视情况而定,如果用户仅仅是点击了一下屏幕,那么可能只会监测到按下和抬起的动作。

1.2事件传递的三个阶段

在了解了触摸事件的三种主要类型之后,在讲解Activity、View、ViewGroup的事件传递的具体实现之前,我们需要来了解本章开头说的事件传递的三个阶段。y分发(Dispatch):事件的分发对应着dispatchTouchEvent方法,在Android系统中,所有的触摸事件都是通过这个方法来分发的,方法原型如下。ublicbooleandispatchTouchEvent(MotionEventev)在这个方法中,根据当前视图的具体实现逻辑,来决定是直接消费这个事件还是将事件继续分发给子视图处理,方法返回值为true表示事件被当前视图消费掉,不再继续分发事件;方法返回值为super.dispatchTouchEvent表示继续分发该事件。如果当前视图是ViewGroup及其子类,则会调用onInterceptTouchEvent方法判定是否拦截该事件。yy拦截(Intercept):事件的拦截对应着onInterceptTouchEvent方法,这个方法只在ViewGroup及其子类中才存在,在View和Activity中是不存在的。方法的原型如下。

publicbooleanonInterceptTouchEvent(MotionEventev)同理,这个方法也是通过返回的布尔值来决定是否拦截对应的事件,根据具体的实现逻辑,返回true表示拦截这个事件,不继续分发给子视图,同时交由自身的onTouchEvent方法进行消费;返回false或者super.onInterceptTouchEvent表示不对事件进行拦截,需要继续传递给子视图。

yy消费(Consume):事件的消费对应着onTouchEvent方法,方法原型如下。publicbooleanonTouchEvent(MotionEventevent)该方法返回值为true表示当前视图可以处理对应的事件,事件将不会向上传递给父视图;返回值为false表示当前视图不处理这个事件,事件会被传递给父视图的onTouchEvent方法进行处理。

在Android系统中,拥有事件传递处理能力的类有以下三种。yyActivity:拥有dispatchTouchEvent和onTouchEvent两个方法。

yyViewGroup:拥有dispatchTouchEvent、onInterceptTouchEvent和onTouchEvent三个方法。yyView:拥有dispatchTouchEvent和onTouchEvent两个方法。本章接下来将分别介绍View和ViewGroup的事件传递机制,Activity相关的内容穿插其中,将不再单独介绍。

1.3View的事件传递机制

虽然ViewGroup是View的子类,但是这里所说的View专指除ViewGroup外的View控件,例如TextView、Button、CheckBox等,View控件本身已经是最小的单位,不能再作为其他View的容器。View控件拥有dispatchTouchEvent和onTouchEvent两个方法。为了清楚地演示,我们首先来定义一个继承TextView的类MyTextView,如下所示。我们将每个事件的触发都打印了日志,以方便了解事件传递的流程。

同时定义一个MainActivity用来展示MyTextView,在这个Activity中,我们为MyTextView设置了点击(onClick)和触摸(onTouch)监听,方便跟踪了解事件传递的流程,代码如下。

运行上面的代码,点击MyTextView,在Logcat中将打印出如下日志。

从上面的代码和运行日志可以看出,dispatchTouchEvent、onTouchEvent这两个方法的返回值可能存在以下三种情况。

yy直接返回false。

yy直接返回true。

yy返回父类的同名方法,例如super.dispatchTouchEvent。不同的返回值会导致事件传递流程相差甚远,通过不断修改这些方法的返回值并查看日志记录,我们最终可以得到屏幕按下操作ACTION_DOWN事件的处理流程如图1-1所示,ACTION_UP的流程与图1-1类似,只不过事件类型不同而已,我们将不再一一列举。

从上面的流程图可以得出以下结论。

……

网友评论(不代表本站观点)

来自1***l(**的评论:

mark209102741

2017-06-08 14:48:33
来自匿名用**的评论:

qqqqq

2017-11-11 07:47:46
来自***(匿**的评论:

vvvvVB不巴巴爸爸巴巴爸爸

2016-12-25 12:16:21
来自无昵称**的评论:

2016-12-29 15:21:20
来自匿名用**的评论:

书不过。包装能不能专业点书的角落边上全都碰坏了

2017-01-09 18:45:44
来自蝴蝶93**的评论:

特别好特别好

2017-01-17 14:54:53
来自噼***5(**的评论:

涵盖的知识点很多,但是排版过于宽松,内容过于粗略,知识点讲解级不详细,因此并不推荐购买

2017-02-16 09:49:56
来自匿名用**的评论:

进阶还是可以的

2017-02-21 11:35:42
来自匿名用**的评论:

整体感觉不错。

2017-02-27 10:57:54
来自匿名用**的评论:

很好书是正版的

2017-03-12 10:46:33
来自匿名用**的评论:

里面印刷有白页,感觉正版就是这质量?

2017-04-23 21:58:37
来自匿名用**的评论:

好,这书不错。

2017-04-24 10:16:58
来自匿名用**的评论:

不错!不错!不错!

2017-05-04 07:54:54
来自匿名用**的评论:

送货快。包装好。没有质量问题。

2017-05-28 16:46:46
来自何卓锋**的评论:

2017-06-07 08:54:36
来自匿名用**的评论:

很好,很不错,值得购买

2017-06-11 21:58:17
来自淼***(**的评论:

图没啥区别,我就不晒了。其实怎么说了,我以前不评论,但是因为我之前看评论,好像都说的不太好,代码少啦,网上找的啦。其实本身你怎么可能在网上找不到书里的内容?如果你愿意完全可以不要买书,但书上的内容我感觉调理更清晰。至于有些人说关于代码不详细的问题,我特别要说明一下,这本书是给有基础的人看的。不是给初学者,不是给初学者,不是给初学者,重要的事情说三遍。如果是刚学我建议买那个入门到精通,我就用的那个。还有一个就是买黑马的视频,淘宝有,两三块钱吧。

2017-06-16 23:58:12
来自s***d(**的评论:

内容丰富翔实

2017-07-02 16:47:45
来自x***2(**的评论:

写的还不错

2017-07-12 08:23:39
来自匿名用**的评论:

东西不错,就是最后的快递态度很差,打电话一直不接,中间还夹着几次正在通话中,然后打过去通了还是不接,好不容易接了电话,说了两句话就直接挂了,无语

2017-07-15 15:24:05
来自陈苗阿**的评论:

听说这本书很好,刚收到,看了后再追评

2017-08-18 13:49:25
来自南***星**的评论:

非常的喜欢

2017-08-21 12:25:04
来自无昵称**的评论:

还不错,有些方面平时没留意,受益了

2017-10-26 12:34:32
来自匿名用**的评论:

太简单了,简单东西简单描述,还不入看百度百科详细,比较复杂点的,一两行文字带过,估计作者不懂

2017-03-07 15:27:42
来自匿名用**的评论:

所讲内容都是蜻蜓点水,没什么代码,感觉像是东抄西搬的,没有真正结合实际项目

2017-02-09 08:04:25
来自无昵称**的评论:

涵盖面广泛 罗列了各种流行框架 但是不是很详细

2016-12-12 22:27:59
来自z***o(**的评论:

书很快就收到了,先给个好评吧,看了两个章节,本书覆盖的知识点很全面,但是介绍不是很详细,项目开发中用到可能还需要再去深入研究吧

2016-12-26 16:49:05

免责声明

更多出版社