优秀资料收集

Catalogue
  1. 1 手势检测
  2. 2 Android 事件分发机制
  3. 3 中文技术文档的写作规范
  4. 4 认识 Android 文件存储目录
  5. 5 try catch finally 详解
  6. 6 APP 性能检测工具
  7. 7 Android Studio 调试技巧
  8. 8 音乐类应用开发
  9. 9 反射
  10. 10 泛型
  11. 11 JVM
  12. 12 注解
  13. 13 Android 应用混淆
  14. 14 Android local单元测试

1 手势检测

GestureDetector:http://www.gcssloop.com/customview/gestruedector
ScaleGestureDetector:http://www.27house.cn/archives/526

2 Android 事件分发机制

ViewRootImpl篇(前传):https://blog.csdn.net/dongxianfei/article/details/83863888
Part01:http://www.gcssloop.com/customview/dispatch-touchevent-theory
Part02:http://www.gcssloop.com/customview/dispatch-touchevent-source

3 中文技术文档的写作规范

https://github.com/ruanyf/document-style-guide

4 认识 Android 文件存储目录

https://blog.csdn.net/u010937230/article/details/73303034

注意:文件挂载相关的不用看,写的有点混乱。笔者认为这个部分意义也不大,如果要了解可以找下其它的技术文档。

5 try catch finally 详解

https://www.cnblogs.com/yanbigfeg/p/9295541.html

6 APP 性能检测工具

使用 CPU Profiler 检查 CPU 活动:https://juejin.im/entry/5c0daf65f265da6150644a1d。

如需了解更多关于 CPU Profiler 的介绍,可参考官方文章

使用 Memory Profiler 检查内存使用情况:https://www.jianshu.com/p/e75680772375

Memory Profiler 对内存泄露的展示结果不够友好(Android Studio 3.6.1),建议使用 LeakCanary 进行内存泄露的检测,这是有关 leakcanary 源码分析的视频(笔者还没完全看明白,后面复习到再补充)。

检查 GPU 渲染速度和过度绘制:https://developer.android.com/topic/performance/rendering/inspect-gpu-rendering#profile_rendering

7 Android Studio 调试技巧

https://www.jianshu.com/p/9fbf316582e3

注意:
1、Kotlin 对于以上链接中提到的一些调试技巧不适用。
2、文中介绍 Step Into 时说到的类库是指 java 提供的类库,如果是 Android 提供的 API 接口,依然会进入方法内。
3、Step Out 操作介绍:如果在调试的时候你进入了一个方法(如f2()),并觉得该方法没有问题,你就可以使用stepout跳出该方法,返回到该方法被调用处的下一行语句。值得注意的是,该方法已执行完毕。

8 音乐类应用开发

1、https://mp.weixin.qq.com/s/AngSHW1qUBsl_acFhlWGDA
2、https://developer.android.com/guide/topics/media-apps/audio-app/building-an-audio-app
3、https://exoplayer.dev/hello-world.html
4、https://github.com/googlesamples/android-MediaBrowserService/
5、https://stuff.mit.edu/afs/sipb/project/android/docs/training/managing-audio/audio-focus.html#HandleFocusLoss

9 反射

廖雪峰 Java 教程:https://www.liaoxuefeng.com/wiki/1252599548343744/1264804593397984

哪些情况会用到反射?
1、读取注解的值
2、日常开发过程中需要修改系统方法的场景。
3、热更新、插件化
4、JNI 开发中 C 调用 Java 代码。

10 泛型

廖雪峰 Java 教程:https://www.liaoxuefeng.com/wiki/1252599548343744/1255945193293888
码上开学:https://kaixue.io/kotlin-generics/

泛型如何具体化?
1、使用 Kotlin 的 refied 关键字将泛型类型具体化。
2、使用 Class
3、使用 getGenericSuperclass 得到具体泛型类型后再使用之。参考廖雪峰 Java 教程的“泛型继承”部分。同时,为了加深对这个概念的理解,建议阅读下 Gson 库中 TypeToken 的相关源码。

11 JVM

深入理解java虚拟机:https://blog.csdn.net/qq_44543508/category_9493538.html?utm_source=ffzl_BWzd&spm=1001.2101.3001.4235

java String 在内存中如何存储的?
参考地址>>

12 注解

廖雪峰 Java 教程:https://www.liaoxuefeng.com/wiki/1252599548343744/1255945389098144

13 Android 应用混淆

Proguard 介绍:https://medium.com/@JamesQI/proguard-d8cc2e67211

为了便于查看 Proguard 的混淆结果,学会查看 APP 中的代码是必备技能,具体方法请参考这篇文章中对 dex2jar 以及 jd-gui 的使用讲解。

实践经验:
1、如果 Proguard 用得不是很熟(比如笔者)或者没有十足把握应对某个混淆场景时,那么建议多用类似-keep class com.cxp.classname {*;}这样的规则配置 Proguard,虽然混淆的力度会大大降低,但是可以最大限度保证代码逻辑还是正确的。这里还要强调的是-keep class com.cxp.DemoClass {*;}-keep class com.cxp.DemoClass是有差别的,前者可以让 DemoClass 类的类名及其成员不被混淆,后者只能让 DemoClass 类的类名不被混淆。
2、新建一个Android项目后,会默认引入自带的混淆规则,即: “Android SDK根目录\tools\proguard\proguard-android-optimize.txt” 文件。不过现在你可以去掉默认引入逻辑了,原因是’proguard-android-optimize.txt’文件开头有下面这样一段描述:

This file is no longer maintained and is not used by new (2.2+) versions of the Android plugin for Gradle. Instead, the Android plugin for Gradle generates the default rules at build time and stores them in the build directory.

大概意思就是说,该默认规则从plugin 2.2版本开始就没有用了,取而代之的是编译时动态生成默认规则的方式,生成规则的文件是build/intermediates/aapt_proguard_file/release/aapt_rules.txt。同样地,在我们自定义的 Proguard 文件中,只需要关注自身业务的混淆规则,四大组件、Fragment 等这些既定的混淆策略不用写(当然,实际开发中还是要加强自测,万一默认规则有漏掉的呢)。

14 Android local单元测试

https://github.com/simplezhli/AndroidUT

已看1-4章、9-10章,写得不错。