首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >干净地退出android应用程序

干净地退出android应用程序
EN

Stack Overflow用户
提问于 2014-01-14 19:31:51
回答 2查看 667关注 0票数 1

在我寻找这个主题的任何地方都会说(继续):“在您的活动中调用finish(),如果您有任何服务正在运行,请在它们上调用stopService()”。

所以我就这样做了,因为它似乎起作用了,我不再担心了。今天,在调试代码的一部分时,我需要将一个Log行添加到一个无结束线程的方法中,我希望在这个应用程序的整个生命周期中执行该方法,基本上如下所示:

代码语言:javascript
复制
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()并停止我已经启动的服务的退出按钮后,我仍然每9秒在LogCat中无限期地看到一条Log消息。

所以问题是:这个线程不是一个服务,它为什么继续运行?我做错了什么吗?这是一种预期的行为吗?有没有一种真正的方法来摧毁应用程序内存中的所有东西?

谢谢!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-01-14 19:42:19

所以问题是:这个线程不是一个服务,它为什么继续运行?

因为你的进程还在运行。即使您完成了一个活动或停止了一个服务,您的应用程序进程也可能会继续运行。

我做错了什么吗?

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

这是一种预期的行为吗?

是。Android系统将进程保持为缓存机制,以加快恢复以前使用的应用程序的速度。系统最终会在它认为必要时杀死您的进程(以及正在运行的线程)。不要指望你的线程不会结束,因为它最终会结束的。

有没有一种真正的方法来摧毁应用程序内存中的所有东西?

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

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

票数 7
EN

Stack Overflow用户

发布于 2014-01-14 19:45:19

你不用担心这个。在Android中没有“退出应用程序”这样的东西。当应用程序启动时,Android会生成一个应用程序“生命”的进程。当应用程序启动Android组件(比如活动或服务)时,Android就知道您的应用程序是活动的,然后它将尝试将其保存在内存中。如果关闭所有活动和所有服务,应用程序的重要性就会降低。从现在起,如果Android需要更多的内存,它将在任何时候杀死承载应用程序的进程。

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

如果你真的想退出这个应用程序,你可以尝试调用标准的System.exit(0)函数。这不一定是必需的,但您可以使用它,如果您愿意。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21122324

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档