如何监听System.exit(0)的调用栈

Kotlin 复制代码
private fun installShutdownHookForDebug() {
    try {
        Runtime.getRuntime().addShutdownHook(
            Thread(
                {
                    try {
                        val stacks = Thread.getAllStackTraces()
                        Log.e("ExitHook", "VM shutdown hook running, threads=${stacks.size}")
                        for ((thread, stack) in stacks) {
                            Log.e(
                                "ExitHook",
                                "thread='${thread.name}' state=${thread.state} daemon=${thread.isDaemon} id=${thread.id}\n" +
                                    stack.joinToString(separator = "\n") { "  at $it" }
                            )
                        }
                    } catch (t: Throwable) {
                        Log.e("ExitHook", "Failed dumping thread stacks", t)
                    }
                },
                "ExitHook",
            ),
        )
        Log.i("ExitHook", "Installed shutdown hook (debug only)")
    } catch (t: Throwable) {
        Log.w("ExitHook", "Failed to install shutdown hook", t)
    }
}

在Application中的oncreate中调用就行

经过测试我看到了如下日志

Kotlin 复制代码
2025-12-31 17:41:36.556 20049-20217 ExitHook                com.omnicast.androidtv               E  thread='Thread-11' state=WAITING daemon=false id=739 (Explain with AI)
                                                                                                      at java.lang.Object.wait(Native Method)
                                                                                                      at java.lang.Object.wait(Object.java:422)
                                                                                                      at java.lang.Thread.join(Thread.java:1262)
                                                                                                      at java.lang.Thread.join(Thread.java:1338)
                                                                                                      at java.lang.Runtime.exit(Runtime.java:160)
                                                                                                      at java.lang.System.exit(System.java:1496)
                                                                                                      at xxxx.run(Unknown Source:44)
相关推荐
Live0000019 小时前
在鸿蒙中使用 Repeat 渲染嵌套列表,修改内层列表的一个元素,页面不会更新
前端·javascript·react native
柳杉19 小时前
使用Ai从零开发智慧水利态势感知大屏(开源)
前端·javascript·数据可视化
躺平大鹅20 小时前
Java面向对象入门(类与对象,新手秒懂)
java
兆子龙20 小时前
从高阶函数到 Hooks:React 如何减轻开发者的心智负担(含 Demo + ahooks 推荐)
前端
狗胜20 小时前
测试文章 - API抓取
前端
三小河20 小时前
VS Code 集成 claude-code 教程:告别海外限制,无缝对接国内大模型
前端·程序员
jerrywus20 小时前
前端老哥的救命稻草:用 Obsidian 搞定 Claude Code 的「金鱼记忆」
前端·agent·claude
球球pick小樱花20 小时前
游戏官网前端工具库:海内外案例解析
前端·javascript·css
用户605723748730820 小时前
AI 编码助手的规范驱动开发 - OpenSpec 初探
前端·后端·程序员