Android 应用程序崩溃时的内务处理

Android 应用程序崩溃时的内务处理,android,mobile,garbage-collection,Android,Mobile,Garbage Collection,如果Android应用程序因某种原因崩溃,我可以在哪里做一些家务活?关闭句柄、连接等操作?操作系统内核将关闭所有打开的文件句柄、套接字、分配的内存等。它不能刷新程序内部的缓冲IO,它只会在不向远程对等方说“再见”的情况下拆除TCP套接字,但当操作系统重新获取进程时,您没有什么可以(或需要)做的 但是,如果应用程序在持久性存储上留下不一致的数据时崩溃,您可能需要在下次启动时进行一些清理。您可以使用Thread.setDefaultUncaughtExceptionHandler()注册崩溃事件。尽

如果Android应用程序因某种原因崩溃,我可以在哪里做一些家务活?关闭句柄、连接等操作?

操作系统内核将关闭所有打开的文件句柄、套接字、分配的内存等。它不能刷新程序内部的缓冲IO,它只会在不向远程对等方说“再见”的情况下拆除TCP套接字,但当操作系统重新获取进程时,您没有什么可以(或需要)做的


但是,如果应用程序在持久性存储上留下不一致的数据时崩溃,您可能需要在下次启动时进行一些清理。

您可以使用Thread.setDefaultUncaughtExceptionHandler()注册崩溃事件。尽管如果你的整个应用程序崩溃,你不必担心关闭连接,因为它们都会随着应用程序一起被杀死。

实际上,我有自己的对象,这些对象会被缓存以发送到一致状态。因此,操作系统可能对我没有帮助。日志文件系统将元数据更改写入磁盘两次:首先写入日志,然后写入文件系统,然后在日志中设置一个标志,指示这些更改已成功存储。当一个不干净地返回时,它会扫描日志并重新应用所有未标记为成功的更改。当对象一致或不一致时,可以更新对象上的“clean”或“dirty”标志,以便在下次启动时可以删除不一致的对象。这与setUncaughtExceptionHandler()有什么区别?我认为线程使用的异常处理程序是由
setUncaughtExceptionHandler()设置的
如果存在,如果不存在,则将使用
Thread.setDefaultUncaughtExceptionHandler()
(如果存在)。