干净地退出Android应用程序

时间:2014-01-14 19:31:52

标签: android exit

我找到这个主题的任何地方都说(恢复):“在您的活动上致电finish(),如果您有任何服务正在运行,请致电stopService()”。

所以我做了,而且看起来似乎有效,我不再担心了。今天,调试我的代码的一部分,我需要在非结束线程的方法中添加一个Log行,我希望在应用程序的所有生命中执行它,基本上它是这样的:

final Thread buf_liberator = new Thread(
  new Runnable() {
    public void run() {
      while (true) {
        methodCall();
        SystemClock.sleep(9000);
      }
    }
  } 
);
buf_liberator.setPriority(7);
buf_liberator.start();

methodCall()我放了Log行,令我惊讶的是,在我关闭我的应用程序后按下退出按钮调用finish()并停止我已启动的服务,我仍然会在LogCat中无限期地每隔9秒看到Log消息。

所以问题是(是):这个线程不是服务,为什么它一直在运行?难道我做错了什么?这是预期的行为吗?是否有真正的方法来销毁应用程序在内存中的所有内容?

谢谢!

2 个答案:

答案 0 :(得分:7)

  

所以问题是(是):这个线程不是服务,为什么它一直在运行?

因为您的流程仍在运行。即使你完成了一个Activity或者停止()一个服务,你的应用程序也可能继续运行。

  

我做错了吗?

除了创建一个永无止境的线程?否。

  

这是预期的行为吗?

是。 Android系统将处理作为缓存机制来加速恢复以前使用的应用程序。系统最终会在必要时终止您的进程(以及正在运行的线程)。 不要指望你的线程没有结束,因为它最终将

  

是否有一种真正的方法来摧毁应用程序在内存中的所有内容?

有一些方法,比如System.exit(),但通常建议您让系统按预期工作。

进一步阅读: http://developer.android.com/guide/components/processes-and-threads.html

答案 1 :(得分:2)

您无需担心这一点。在Android中没有“退出应用程序”这样的东西。当应用程序启动时,Android会产生一个应用程序“存在”的过程。当您的应用程序启动Android组件(如活动或服务)时,Android会知道您的应用程序处于活动状态,然后会尝试将其保留在内存中。如果关闭所有活动和所有服务,则应用程序的重要性会降低。从现在开始,如果Android需要更多内存,它将随时终止托管应用程序的进程。

在您的情况下,您关闭了所有组件,但保持一个线程运行。它继续在后台运行,因为Android不需要更多内存,你的应用程序保持“缓存”以备将来使用。如果你开始使用内存消耗游戏,那么你的应用程序就会被杀死。因此,您不能依赖在活动组件(如服务)之外运行的线程,因为它可以随时被杀死。

如果您确实要退出应用,可以尝试调用标准Java函数System.exit(0)。这不是必需的,但如果您愿意,可以使用它。