A
从 100 题开始吧,是一道 easy 的题目:Same Tree
思路:比较简单,类似于先序遍历+递归,先判断当前结点,都为 null 返回 true,有一个为 null 另一个不为 null 则返回 false,如果都不为空,但是 val 值不相等,返回 false,否则说明该结点相等,则递归遍历左子树和右子树;
优化:翻了下答案,多数都是类似的思路,但是代码上可以稍作优化,此处的 if (p==null && q!=null || p!=null && q==null) return false 可以直接写为 if (p==null || q==null) return false
R
Improving build speed in Android Studio
构建速度确实很慢,官方总结了原因和改进措施,AS 4 也刚发布,好像提供了相关工具来显示构建任务所耗时间等信息;
我们能做哪些?
- 注意自定义构建逻辑或者第三方 Gradle 插件的影响、使用 Gradle scan 或者 Gradle Profiler 来提供构建过程中更多信息;
- 优化构建配置和任务:使用配置来设置任务(使用惰性 API)、避免 IO;
- 确保每个 task 声明 input/output,确保是增量和可缓存的;
- 将复杂任务拆分为多个任务以帮助实现增量和可缓存;
- 确保任务未对其他任务的输出进行写入或删除;
- 用 Java/Kotlin 在 plugin/buildSrc 中编写任务,而不是直接在 build.gradle 内部使用 groovy 编写;
- 其他可参考官方《优化构建速度》的文档
T
日常开发中经常想找一个页面叫什么名字,比如测试反馈了一个 bug,给了个截图,如果不是特别熟悉的页面,不知道Activity 和 Fragment 叫什么,我常用的方式:
- 通过 adb 命令:adb shell dumpsys activity top 该命令可以“dump”当前 activity 的信息,从里面也可以找到 Fragment 名字;
- 通过 UETools,然后选择某个控件,直接利用控件的名称去定位;
等等,既然摇一摇,干嘛不直接把当前 activity 或者 fragment 的名称显示出来呢
思路:
- 注册 ActivityLifecycleCallbacks 监听当前生命周期,并定义成员变量保留当前处于“Top”的 activity 对象;
- 定义一个 View,用于显示 Activity 信息,使用 WindowManager 将该 View 添加并显示出来;
- 通过 Activity 获得 Fragment 的方法:fragmentActivity.supportFragmentManager.fragments;

S
Activity 与 Fragment 关系
基于 Tips,看了下 Activity 与 Fragment 关系。记录如下:note.youdao.com/noteshare?i…