最后调用android

时间:2013-06-27 09:02:36

标签: android dalvik

有些情况下,无论应用程序发生什么,我们都需要在最后执行一些代码。我们有什么方法可以在Android中实现finally()功能吗?

注意:崩溃期间不会调用OnDestroy。

事实上,当JVM退出时,即使finally()也不是完全证明方法。但在Java中,我们没有看到太多的JVM出口。但是在Android中,因为我们为每个应用程序进程都有一个DVM,我们需要一种方法来执行最终的代码,我们最终会泄漏内存并且电池消耗量会增加。

5 个答案:

答案 0 :(得分:1)

您最好的选择是分别在每个活动的onPause()中运行清理操作。

在Android中没有类似finally()的内容,因为当应用崩溃时,整个过程很容易终止。甚至不会调用像onPause()这样的常规方法。过程中包含的所有内容(活动,服务,接收者,线程等)都被完全杀死。

答案 1 :(得分:1)

当application / vm崩溃或被杀死时,你不能泄漏内存。在这种情况下,该过程消失了,与之相关的任何内存都消失了。

如果您正在讨论分配和释放处于不同进程的内存,您可以从使用者进程获取Binder,然后使用Binder.linkToDeath功能在该进程终止时接收通知。

答案 2 :(得分:1)

当您的原始流程无论如何都没有运行时,我不确定您的泄密是什么意思。

我们为处理此类情况所做的一件事就是拥有一个'监视程序'进程,但我们必须在Android中运行的本机代码中执行此操作。

在您的情况下,您可以通过指定

来创建服务并使其作为sperate进程运行
  

机器人:过程= “:远程”

清单文件中的

标志。现在该服务可以监视主要的应用程序进程,并在可能的情况下进行一些清理。当然,您需要一种方法让服务流程知道要清理哪些元素。

希望这有帮助。

答案 3 :(得分:0)

有各种方法可以死:

  1. 被系统杀死。当您处于前台时不应该发生,因此请确保在Android生命周期中关闭内容。
  2. 致命异常。您可以使用全局未捕获的异常处理程序来处理此问题。请参阅Ideal way to set global uncaught exception Handler in Android
  3. 本机崩溃。你无能为力。在某些情况下,您可以尝试使用信号处理程序进行恢复,但应用程序将处于非常不确定的状态,因此通常是一个坏主意并且不太可能正常工作。
  4. 通过查看其他一些注释,听起来您的设备在相机驱动程序中有一个错误,即使在打开相机的过程已经死亡之后也会导致它保持打开状态。这是一个系统错误 - 应用程序在崩溃时不必管理系统资源。 (但是,在它得到修复之前,你必须使用你所拥有的东西。)

答案 4 :(得分:-2)

怎么样?
 try { //do something }
 finally { //do the cleanup }

结构?

你应该在任何“危险”操作之前调用它。