在我一直在寻找该主题的任何地方说(继续):“在您的活动上调用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