如何监听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)
相关推荐
毕设源码-钟学长3 分钟前
【开题答辩全过程】以 基于SSM的孤儿救助信息管理系统设计与实现为例,包含答辩的问题和答案
java
独自破碎E3 分钟前
【曼哈顿距离】BISHI25 最大 FST 距离
java·开发语言
苏涵.3 分钟前
Java三大集合:List、Set、Map
java·开发语言
存在的五月雨3 分钟前
Spring Security认证流程
java·开发语言·mysql
树码小子4 分钟前
综合练习:验证码案例(1)总体设计
java·开发语言·spring
C澒5 分钟前
多场景多角色前端架构方案:基于页面协议化与模块标准化的通用能力沉淀
前端·架构·系统架构·前端框架
RisunJan5 分钟前
Linux命令-lprm(删除打印队列中任务)
linux·运维·服务器
崔庆才丨静觅6 分钟前
稳定好用的 ADSL 拨号代理,就这家了!
前端
云姜.7 分钟前
TCP协议特性
服务器·网络·tcp/ip
zzzsde7 分钟前
【Linux】进程(5):命令行参数和环境变量
linux·运维·服务器