有些情况下,无论应用程序发生什么,我们都需要在最后执行一些代码。我们有什么方法可以在Android中实现finally()
功能吗?
注意:崩溃期间不会调用OnDestroy。
事实上,当JVM退出时,即使finally()
也不是完全证明方法。但在Java中,我们没有看到太多的JVM出口。但是在Android中,因为我们为每个应用程序进程都有一个DVM,我们需要一种方法来执行最终的代码,我们最终会泄漏内存并且电池消耗量会增加。
答案 0 :(得分:1)
您最好的选择是分别在每个活动的onPause()
中运行清理操作。
在Android中没有类似finally()
的内容,因为当应用崩溃时,整个过程很容易终止。甚至不会调用像onPause()
这样的常规方法。过程中包含的所有内容(活动,服务,接收者,线程等)都被完全杀死。
答案 1 :(得分:1)
当application / vm崩溃或被杀死时,你不能泄漏内存。在这种情况下,该过程消失了,与之相关的任何内存都消失了。
如果您正在讨论分配和释放处于不同进程的内存,您可以从使用者进程获取Binder,然后使用Binder.linkToDeath功能在该进程终止时接收通知。
答案 2 :(得分:1)
当您的原始流程无论如何都没有运行时,我不确定您的泄密是什么意思。
我们为处理此类情况所做的一件事就是拥有一个'监视程序'进程,但我们必须在Android中运行的本机代码中执行此操作。
在您的情况下,您可以通过指定
来创建服务并使其作为sperate进程运行清单文件中的机器人:过程= “:远程”
标志。现在该服务可以监视主要的应用程序进程,并在可能的情况下进行一些清理。当然,您需要一种方法让服务流程知道要清理哪些元素。
希望这有帮助。
答案 3 :(得分:0)
有各种方法可以死:
通过查看其他一些注释,听起来您的设备在相机驱动程序中有一个错误,即使在打开相机的过程已经死亡之后也会导致它保持打开状态。这是一个系统错误 - 应用程序在崩溃时不必管理系统资源。 (但是,在它得到修复之前,你必须使用你所拥有的东西。)
答案 4 :(得分:-2)
怎么样?
try { //do something }
finally { //do the cleanup }
结构?
你应该在任何“危险”操作之前调用它。