0Pricing
Android Academy · 课时

调试与性能分析

掌握 Android Studio 的调试和性能分析工具:断点、Logcat、Timber、Memory Profiler、LeakCanary、CPU Profiler、Network Inspector 和 Layout Inspector。

调试与性能分析 是 CoddyKit 上的免费 Android Academy 课时。 这是第 4 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 Android Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 Android Academy 课程共包含 4 节课。

调试概览

调试是查找和修复错误的过程。Android Studio 提供了强大的工具:

  • 调试器 — 暂停执行、检查变量、逐步执行代码
  • Logcat — 来自设备的实时日志输出
  • 布局检查器 — 检查实时用户界面层次结构
  • Android 性能分析器 — 分析 CPU、内存和网络
  • 数据库检查器 — 实时查看和查询 Room 数据库

Logcat — 您的第一个调试工具

使用 Log 将消息输出到 Logcat。使用 TAG 过滤日志:

import android.util.Log

class UserRepository {
    companion object {
        private const val TAG = "UserRepo"
    }

    fun fetchUsers() {
        Log.d(TAG, "fetchUsers() called")        // Debug
        Log.i(TAG, "Fetching ${users.size} users") // Info
        Log.w(TAG, "Cache is empty")               // Warning
        Log.e(TAG, "Network error: $exception")    // Error
    }
}

Timber — 更好的日志记录

Timber 是对 Log 的轻量封装,会从发布构建中移除日志调用,并自动将类名添加为 TAG:

// app/build.gradle:
// implementation 'com.jakewharton.timber:timber:5.0.1'

// In Application.onCreate():
if (BuildConfig.DEBUG) {
    Timber.plant(Timber.DebugTree())
}

// Usage anywhere in the app (no TAG needed):
Timber.d("User loaded: %s", user.name)
Timber.e(exception, "Failed to fetch data")
Timber.w("Cache miss for key: %s", key)

断点和调试器

在 Android Studio 中使用断点进行调试的步骤:

  1. 点击代码行旁边的代码槽(左侧边距)— 此时会出现一个红点
  2. 使用调试(小虫图标)而不是“运行”来启动应用
  3. 执行到断点时,程序会暂停
  4. 在变量窗格中检查变量
  5. 使用单步跳过(F8)逐行执行,使用单步进入(F7)进入函数

计算表达式

在断点处暂停时,使用计算表达式(Alt+F8)在当前作用域中运行 Kotlin 代码。无需重启即可验证假设:

  • 检查 list.size 和 user.email.isNotBlank()
  • 调用任意方法并查看返回值
  • 直接检查复杂对象

内存性能分析器

使用内存性能分析器(查看 → 工具窗口 → 性能分析器)查找内存泄漏:

  • 观察堆大小随时间的变化 — 持续增长通常意味着可能存在泄漏
  • 强制执行垃圾回收,观察内存是否减少
  • 生成堆转储,查看当前存活的对象
  • 查找本应已被垃圾回收的 Activity 或 Fragment 实例

LeakCanary — 自动检测泄漏

LeakCanary 会自动检测内存泄漏,并在调试构建中以通知的形式报告:

// app/build.gradle:
debugImplementation 'com.squareup.leakcanary:leakcanary-android:2.12'

// That's it — no code changes needed!
// LeakCanary auto-installs via ContentProvider.
// When a leak is detected, it shows a notification with the leak trace.

// Common causes to watch for:
// - Static references to Context/Activity
// - Not releasing ViewBinding in onDestroyView()
// - Listeners registered to singletons but not unregistered

CPU 性能分析器

使用CPU 性能分析器查找性能瓶颈:

  • 执行某项操作时录制跟踪信息
  • 查看火焰图,了解哪些方法耗时最长
  • 查找主线程上运行时间过长的任务 — 这会导致界面卡顿
  • 将繁重的计算移至 Dispatchers.IO 或 Dispatchers.Default

网络检查器

网络检查器会实时显示应用发出的所有 HTTP 调用:

  • 查看请求 URL、方法、请求头和请求体
  • 查看响应代码、响应体和耗时
  • 识别缓慢或失败的请求
  • 开箱即用地支持 OkHttp(Retrofit 使用的网络库)

通过查看 → 工具窗口 → 应用检查 → 网络检查器访问。

数据库检查器

在正在运行的设备上实时检查和查询 Room 数据库:

  • 查看表及其内容
  • 运行自定义 SQL 查询
  • 使用应用时观察数据变化

通过应用检查 → 数据库检查器访问。API 26 及更高版本支持 Room。

布局检查器

布局检查器会显示用户界面层次结构的实时三维视图:

  • 选择任意视图,查看其属性(外边距、内边距、文本和颜色)
  • 发现重叠的视图或错误的可见性设置
  • 无需猜测即可调试布局问题

通过查看 → 工具窗口 → 布局检查器访问。连接到设备或模拟器上正在运行的应用。

StrictMode

StrictMode 会检测主线程上意外发生的慢速操作(磁盘读取、网络调用),并在调试构建中记录日志或使应用崩溃:

// In Application.onCreate() — debug builds only:
if (BuildConfig.DEBUG) {
    StrictMode.setThreadPolicy(
        StrictMode.ThreadPolicy.Builder()
            .detectDiskReads()
            .detectDiskWrites()
            .detectNetwork()
            .penaltyLog()      // log violations instead of crashing
            .build()
    )
}

快速检查

在 Android 调试构建中,无需额外代码就能自动检测内存泄漏的工具是什么?

回顾:调试与性能分析

高效地查找并修复问题:

  • Logcat + Timber — 轻量级日志记录,发布时自动移除
  • 断点 + 调试器 — 暂停并检查实时执行过程
  • 内存性能分析器 — 检测堆增长和内存泄漏
  • LeakCanary — 通过堆栈跟踪自动检测泄漏
  • CPU 性能分析器 — 查找主线程上的慢速方法
  • 网络检查器 — 监控 HTTP 调用
  • 数据库检查器 — 实时查询 Room
  • StrictMode — 捕获意外的主线程 IO

恭喜您 — 您已经完成了完整的 Android 开发课程!

常见问题解答

「调试与性能分析」课时是免费的吗?

是的 — 「调试与性能分析」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 Android Academy 课程的其余内容,请升级到 CoddyKit PRO。 Android Academy 课程共包含 4 节课。

「调试与性能分析」这节课中我会学到什么?

掌握 Android Studio 的调试和性能分析工具:断点、Logcat、Timber、Memory Profiler、LeakCanary、CPU Profiler、Network Inspector 和 Layout Inspector。 你通过在浏览器中直接运行的动手代码来练习 Android Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。

学习 Android Academy 需要有经验吗?

无需任何先前经验。CoddyKit 上的 Android Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 4 节课,共 4 节。

「调试与性能分析」课时需要多长时间?

大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。

我能在这节 Android Academy 课中编写并运行代码吗?

能。每节 Android Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。

此课程中的所有课时

  1. 使用 JUnit 进行单元测试
  2. 使用 Mockito 进行模拟
  3. 使用 Espresso 进行 UI 测试
  4. 调试与性能分析
← 返回 Android Academy