如何监听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)
相关推荐
JacksonMx14 分钟前
@Transactional 最佳实践
java·spring boot·spring·性能优化
掘金0120 分钟前
EmbedPDF Vue 版 完整正文文档 全网首发
前端
Sincerelyplz21 分钟前
【AI会议纪要实践】mapReduce、RAG 与结构化输出
java·后端·agent
OpenTiny社区21 分钟前
操作ArkTS页面跳转及路由相关心得
前端·typescript·web·opentiny
专注VB编程开发20年22 分钟前
安卓APP与服务器通讯技术,文件传输和文字消息收发
运维·服务器
xiaohua0708day22 分钟前
Lodash库
前端·javascript·vue.js
huakoh22 分钟前
Claude Code 从零到上手指南:国产工具链复现80% Agent能力,DeepSeek+LangChain实战
前端
Ankkaya25 分钟前
浏览器插件接入 Google 登录
前端
Asmewill26 分钟前
DeepAgents学习笔记一(构建深度多智能体)
前端
万物皆对象66627 分钟前
切换路由时页面空白问题(vue3)
前端·vue.js·typescript