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章,写得不错。