《Android高级进阶》是据我所知的市面上唯一一本技术工具书,比较的高大全,作者的目的是为了对全领域有个初步的概念

No1:

在Android系统中,拥有事件传递处理能力的类有以下三种

1)Activity:拥有dispatchTouchEvent和onTouchEvent两个方法

2)ViewGroup:拥有dispatchTouchEvent、onInterceptTouchEvent和onTouchEvent三个方法

3)View:拥有dispatchTouchEvent和onTouchEvent两个方法

No2:

UI管理系统的层级关系

PhoneWindow是Android系统中最基本的窗口系统,每个Activity会创建一个。

PhoneWindow是Activity和View系统交互的接口。DecorView本质上是一个FrameLayout,是Activity中所有View的祖先。

No3:

MeasureSepc是View的一个静态内部类,用来说明应该如何测量这个View。

遍历测量ViewGroup中所有的View:measureChildren方法

测量某个指定的View:measureChild方法

No4:

Android Support Library包含以下几个系列的Jar包

另外还有Annotaion Library

No5:

@Nullable:返回值可以为空

@NonNull:返回值不可以为空

No6:

线程注解

1)@UiThread:运行在UI线程

2)@MainThread:运行在主线程

3)@WorkerThread:运行在后台线程

4)@BinderThread:运行在Binder线程

No7:

值范围注解

1)@Size(min=1):集合不可以为空

2)@Size(max=23):字符串最大字符个数23

3)@Size(2):数组元素个数2

4)@Size(multiple=2):数组大小是2的倍数

@IntRange(from=0,to=255)

@FloatRange(from=0.0,to=1.0)

No8:

权限注解:

1)@RequiresPermission(Manifest.permission.SET_WALLPAPER)

2)@RequiresPermission(anyOf={Manifest.permission.SET_WALLPAPER,Manifest.permission.SET_WALLPAPER}):需要最少一个权限

3)@RequiresPermission(allOf={Manifest.permission.SET_WALLPAPER,Manifest.permission.SET_WALLPAPER}):需要同时声明多个权限

4)@RequirePermission.Read(@RequiresPermission(Manifest.permission.SET_WALLPAPER))

@RequirePermission.Write(@RequiresPermission(Manifest.permission.SET_WALLPAPER)):读写权限

No9:

方法上加@Keep:不需要混淆

No10:

相比较Maven Central,JCenter具有如下有点

1)基于CDN分发函数库,JCenter提供了更快的下载速度

2)JCenter是最大的Java仓库,可以说Maven Central是JCenter的一个子集,托管在Maven Central中的函数库,几乎也都托管在JCenter上面

3)上传函数到JCenter上面是一件非常简单的事情,Bintray的用户界面对用户友好

4)如果想要同时将函数上传到Maven Central上面,Bintray网站上通过简单的点击操作就可以完成

但它们是由不同的提供商托管在不同的服务器上面,两者并无关系

No11:

一个完整的函数库依赖字符串包含三部分:GROUP_ID:ARTIFACT_ID:VERSION

GROUP_ID:函数库所属Group,一般为包名或组织名

ARTIFACT_ID:标识函数库的名字

VERSION:版本号

No12:

Serializable是JDK提供的接口,这种序列化方法是基于磁盘或者网络的,而Parcelable是Android SDK提供的,它是基于内存的,由于内存读写速度高于磁盘,因此在Andorid中跨进程对象的传递一般使用Parcelable。

No13:

Parcelable插件:android parcelable code generator

实现parcelable实现方法

1)describeContents:接口内容的描述,一般默认返回0即可

2)writeToParcel:序列化的方法,将类的数据写入到Parcel容器中

3)静态的Parcelable.Creator接口,这个接口包含两个方法

  * createFromParcel:反序列化的方法,将Parcel还原成java对象

  * newArray:提供给外部类反序列化这个数组使用

No14:

编码规范检查插件:CheckStyle

No15:

app理想架构图

No16:

开源日志记录库:Logger+LogUtils(https://github.com/pengwei1024/LogUtils)+timber(https://github.com/JakeWharton/timber)

No17:

fastjson还存在一个专门为Android定制的版本———fastjson.android(https://github.com/alibaba/fastjson/wiki/Android%E7%89%88%E6%9C%AC)

No18:

数据库:对象关系映射(ORM)框架:

greenDAO———https://github.com/greenrobot/greenDAO  推荐

Realm———https://realm.io

No19:

传统的图片缓存方案中设置有两级缓存,分别是内存缓存和磁盘缓存。在Fackbook推出的Fresco中,它增加了一级缓存,也就是Native缓存,这极大地降低了使用Fresco的app出现oom的概率

No20:

Glide和Picasso有90%的相似度,可以说就是Picasso的克隆版本,只是在细节上还是存在不少区别。

Glide为包含图片的滚动列表做了尽可能流畅的优化。除了静态图片,Glide也支持GIF格式图片的显示。

Glide提供了灵活的API可以让开发者方便的替换下载图片所用的网络函数库,默认情况下,它使用HttpUrlConnection作为网络请求模块,开发者也可以根据自己项目的实际需求灵活使用Google的Volly或者Square的okhttp等函数库进行替换

No23:

所有的插件haul方案都是使用了DexClassLoader来加载插件APK中的.class文件的

No24:

插件框架:

android-pluginmgr:使用DexMaker的动态热部署功能来生成Activity,让这个Activity继承目标插件所在的Activity

dynamic-load-apk:基于代理的方式实现插件框架的,需要按照一定的规则来开发插件apk,插件中的组件需要实现经过改造后的activity、fragmentactivity、service等的子类

DynamicApk:携程实现的一种实现多APK/DEX加载的插件框架解决方案,使用这个框架,我们可以实现Android Studio多module工程并行开发模式,同时可以实现在线热修复功能

DroidPlugin:是360手机助手实现的一种插件框架,它可以直接运行第三方的独立APK文件,完全不需要对APK进行修改或者安装

Small:目的是实现轻巧的跨平台插件化框架,他最低支持Android API Level8和IOS 7

No25:

推送方案推荐:基于MQTT协议

No26:

在android中想要建立TCP长连接,就不能使用HttpUrlConnection或者HttpClient等Http协议级别的,而要使用TCP级别的Socket

长连接通过Socket的connect方法实现,setKeepAlive(true)

No27:

META-INF存放的是签名相关的信息,用于验证APK包的完整性以及保证系统的安全

* MANIFEST.MF:主要存放APK包中每个文件的名字及每个文件的SHA1哈希值

* CERT.SF:通常每个APP会有一个特定的名字,它保存的是MANIFEST.MF的哈希值以及MANIFEST.MF文件中每一个哈希项的哈希值

* CERT.RSA:保存了APK的签名和证书的公钥信息

No28:

最终影响apk包大小的文件可分为:classes*.dex、lib目录下的so.文件、资源文件(assets目录、res目录、resources.arsc索引表文件)

No29:

android能够使用的图片编解码格式只有三种:JPEG、PNG、WEBP(首选)

No30:

图片压缩工具:无损压缩ImageOptim、有损压缩ImageAlpha、有损压缩TinyPNG

webp转换工具可以选择智图和iSparta

No31:

android sdk自带ninePatch图的编辑工具,位于sdk/tools/draw9patch中

或者在android studio右击某张图片,选择create 9-patch file进行转换

No32:

资源混淆推荐微信的AndResGuard:https://github.com/shwenzhang/AndResGuard

No33:

ButterKnife版本7.0.1依然是通过运行时反射实现View的注入,性能较低下。版本8.0.0-SNAPSHOT使用编译时注解来提升性能。

No34:

依赖注入框架的对比:

ButterKnife是纯粹的View注入框架。

RoboGuice3.0版本开始使用编译时注解提升性能,但还有很多地方用到反射机制。并且使用代码侵入性比较大。

Dagger使用编译时注解,但在对象图的构建时还是使用到了反射机制,在运行时检测依赖注入是否正常工作,耗了性能。

Dagger2完全抛弃了反射机制,转而在编译阶段完成。但没有实现动态机制,缺乏灵活性。

No35:

React Native是使用Javascript语言进行开发,同时基于ReactJS框架语法。

No36:

AOP开源框架:Hugo,gradle-android-aspectj-plugin,RoboAspetJ,gradle_plugin_android_aspectjx

No37:

gradle的替换工具:Facebook Buck(暂时只支持mac os x和linux)

No38:

网络优化:

1)避免DNS解析

2)合并网络请求

3)预先获取数据

4)避免轮询:尽量使用推送

5)优化重连机制:设定一个最大重连次数

6)离线缓存

7)压缩数据大小

8)不同的网络环境使用不同的超时策略

9)CDN的使用:内容分发网络

No39:

Proguard特性:压缩源代码,优化java字节码,混淆重命名,预校验代码

No40:

Android应用加固是指在APK的外面加一层壳,并对APK里面的dex文件进行加密,可以有效防止app被反编译。

No41:

Android调试工具:Facebook Stetho:

1)视图布局监视

2)数据库监视

3)网络监视

No42:

LeakCanary原理:

1)RefWatcher.watch()函数会为被监控的对象创建一个KeyedWeakReference弱引用对象

2)在后台线程AndroidWatchExecutor中,检查KeyedWeakReference弱引用是否已经被清除,如果还存在,则触发一次垃圾回收。垃圾回收之后,如果弱引用对象依然存在,说明发生了内存泄漏

3)接着在一个独立的进程中启动HeapAnalyzerService服务,基于唯一的reference key,HeapAnalyzer可以在heap dump中找到对应的KeyedWeakReference,并定位到发生内存泄漏的对象引用。

  HeapAnalyer会计算到GC Roots的最短强引用路径,并判断是否存在泄漏,并构建出导致泄漏的对象引用链

No43:

Android单元测试框架Robolectric 3.0:设计思想是通过实现一套JVM能够运行的Android代码,从而实现脱离Android环境进行测试

No44:

Android UI自动化测试框架:Monkey,MonkeyRunner,UIAutomator,Robotium,Espresso,Appium

No45:

Android静态代码分析工具:CheckStyle,FindBugs,PMD,Lint

No46:

Jenkins全局配置需要进行JDK,Android SDK,Git,SVN和Gradle的环境配置

《Android高级进阶》读书笔记相关推荐

  1. 读书笔记 | 墨菲定律

    1. 有些事,你现在不做,永远也不会去做. 2. 能轻易实现的梦想都不叫梦想. 3.所有的事都会比你预计的时间长.(做事要有耐心,要经得起前期的枯燥.) 4. 当我们的才华还撑不起梦想时,更要耐下心来 ...

  2. 读书笔记 | 墨菲定律(一)

    1. 有些事,你现在不做,永远也不会去做. 2. 能轻易实现的梦想都不叫梦想. 3.所有的事都会比你预计的时间长.(做事要有耐心,要经得起前期的枯燥.) 4. 当我们的才华还撑不起梦想时,更要耐下心来 ...

  3. 洛克菲勒的38封信pdf下载_《洛克菲勒写给孩子的38封信》读书笔记

    <洛克菲勒写给孩子的38封信>读书笔记 洛克菲勒写给孩子的38封信 第1封信:起点不决定终点 人人生而平等,但这种平等是权利与法律意义上的平等,与经济和文化优势无关 第2封信:运气靠策划 ...

  4. 股神大家了解多少?深度剖析股神巴菲特

    股神巴菲特是金融界里的传奇,大家是否都对股神巴菲特感兴趣呢?大家对股神了解多少?小编最近在QR社区发现了<阿尔法狗与巴菲特>,里面记载了许多股神巴菲特的人生经历,今天小编简单说一说关于股神 ...

  5. 2014巴菲特股东大会及巴菲特创业分享

     沃伦·巴菲特,这位传奇人物.在美国,巴菲特被称为"先知".在中国,他更多的被喻为"股神",巴菲特在11岁时第一次购买股票以来,白手起家缔造了一个千亿规模的 ...

  6. 《成为沃伦·巴菲特》笔记与感想

    本文首发于微信公众帐号: 一界码农(The_hard_the_luckier) 无需授权即可转载: 甚至无需保留以上版权声明-- 沃伦·巴菲特传记的纪录片 http://www.bilibili.co ...

  7. 读书笔记002:托尼.巴赞之快速阅读

    读书笔记002:托尼.巴赞之快速阅读 托尼.巴赞是放射性思维与思维导图的提倡者.读完他的<快速阅读>之后,我们就可以可以快速提高阅读速度,保持并改善理解嗯嗯管理,通过增进了解眼睛和大脑功能 ...

  8. 读书笔记001:托尼.巴赞之开动大脑

    读书笔记001:托尼.巴赞之开动大脑 托尼.巴赞是放射性思维与思维导图的提倡者.读完他的<开动大脑>之后,我们就可以对我们的大脑有更多的了解:大脑可以进行比我们预期多得多的工作:我们可以最 ...

  9. 读书笔记003:托尼.巴赞之思维导图

    读书笔记003:托尼.巴赞之思维导图 托尼.巴赞的<思维导图>一书,详细的介绍了思维发展的新概念--放射性思维:如何利用思维导图实施你的放射性思维,实现你的创造性思维,从而给出一种深刻的智 ...

  10. 产品读书《滚雪球:巴菲特和他的财富人生》

    作者简介 艾丽斯.施罗德,曾经担任世界知名投行摩根士丹利的董事总经理,因为撰写研究报告与巴菲特相识.业务上的往来使得施罗德有更多的机会与巴菲特亲密接触,她不仅是巴菲特别的忘年交,她也是第一个向巴菲特建 ...

最新文章

  1. 从多媒体技术演进看AI技术
  2. 刚刚,Python 3.10 正式发布了,我发现了一个可怕的功能..
  3. 支付宝2018年账单发布,更注重用户隐私保护
  4. 分区表导入导出[未完]
  5. RxJava 教程第一部分:入门之 关键的类
  6. 【DIY】可能是最实用最便宜的 arduino 温湿度计方案,200615整合家用声控温湿度计完整方案...
  7. 怎么提交 checkbox 表单_8. html form表单
  8. [Microsoft][SQL Server 2000 Driver for JDBC]Error establishing socket
  9. php中带?错误,参考-此错误在PHP中意味着什么?
  10. 傲游浏览器如何关闭智能填表 智能填表功能关闭方法
  11. 不用再更换整机了,苹果官方可修复iPhone 12系列破裂后盖玻璃
  12. Docker : Docker 安装ES
  13. 配置Memcache服务器并实现主从复制功能(repcached)(转)
  14. ubuntu安装deb软件包文件
  15. php 微信表情存储,emoji表情存储到数据库的方法
  16. 走自己的路,让国际米兰连胜去吧!(写给米兰球迷)
  17. 中国居民人均财富36.6万元,你达标了吗?
  18. Inverse design of 3d molecular structures with conditional generative neural networks(2022论文阅读)
  19. SCSI硬盘数据如何用EasyRecovery恢复
  20. 【JetBrain】JetBrain系列软件设置背景图

热门文章

  1. html绘制word柱状图,如何在word绘制插入柱形图_excel中如何插入柱形图 - 学无忧
  2. [20190320]测试相同语句遇到导致cursor pin S的情况.txt
  3. [信号处理小结系列1]信号和信息
  4. 什么是集中权限管理?为什么要集中权限管理?
  5. 自从学会了Python,我实现了壁纸自由(6)
  6. 关于stimulsoft reports 报表格式化format问题描述
  7. 更彻底清理微信存储空间让小存储手机继续生存
  8. 实战挖掘某出版社漏洞集合
  9. 紫书 例题8-5 UVa11054(等价转换)
  10. 计算机作文英语初中,初中英语作文:Computer Games