如何监听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)
相关推荐
带刺的坐椅9 小时前
Solon AI Skills 会是 Agent 的未来吗?
java·agent·langchain4j·solon-ai
jacGJ9 小时前
记录学习--文件读写
java·前端·学习
毕设源码-赖学姐9 小时前
【开题答辩全过程】以 基于WEB的实验室开放式管理系统的设计与实现为例,包含答辩的问题和答案
前端
幻云20109 小时前
Python深度学习:从筑基到登仙
前端·javascript·vue.js·人工智能·python
花间相见9 小时前
【JAVA开发】—— Nginx服务器
java·开发语言·nginx
扶苏-su9 小时前
Java---Properties 类
java·开发语言
cypking9 小时前
四、CRUD操作指南
java
2301_7806698610 小时前
文件字节流输出、文件复制、关闭流的方法
java
我即将远走丶或许也能高飞11 小时前
vuex 和 pinia 的学习使用
开发语言·前端·javascript
剑锋所指,所向披靡!11 小时前
C++之类模版
java·jvm·c++