在我一直在寻找该主题的任何地方说(继续):“在您的活动上调用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()并停止我已启动的服务,但我仍然每9看到一次Log消息在LogCat中无限期地秒数。

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

谢谢!

最佳答案

因此,问题是:该线程不是服务,为什么它继续运行?


因为您的进程仍在运行。即使您完成()活动或停止()服务,您的应用程序进程也可能会继续运行。


  难道我做错了什么?


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


  这是预期的行为吗?


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


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


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

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

08-26 03:15
查看更多