在我寻找这个主题的任何地方都会说(继续):“在您的活动中调用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秒在LogCat中无限期地看到一条Log消息。
所以问题是:这个线程不是一个服务,它为什么继续运行?我做错了什么吗?这是一种预期的行为吗?有没有一种真正的方法来摧毁应用程序内存中的所有东西?
谢谢!
发布于 2014-01-14 19:42:19
所以问题是:这个线程不是一个服务,它为什么继续运行?
因为你的进程还在运行。即使您完成了一个活动或停止了一个服务,您的应用程序进程也可能会继续运行。
我做错了什么吗?
除了创建一个永无止境的线程?不是的。
这是一种预期的行为吗?
是。Android系统将进程保持为缓存机制,以加快恢复以前使用的应用程序的速度。系统最终会在它认为必要时杀死您的进程(以及正在运行的线程)。不要指望你的线程不会结束,因为它最终会结束的。
有没有一种真正的方法来摧毁应用程序内存中的所有东西?
有一些方法,如System.exit(),但通常建议您让系统按预期工作。
进一步阅读:http://developer.android.com/guide/components/processes-and-threads.html
发布于 2014-01-14 19:45:19
你不用担心这个。在Android中没有“退出应用程序”这样的东西。当应用程序启动时,Android会生成一个应用程序“生命”的进程。当应用程序启动Android组件(比如活动或服务)时,Android就知道您的应用程序是活动的,然后它将尝试将其保存在内存中。如果关闭所有活动和所有服务,应用程序的重要性就会降低。从现在起,如果Android需要更多的内存,它将在任何时候杀死承载应用程序的进程。
在您的示例中,您关闭了所有组件,但保持了线程的运行。它继续在后台运行,因为Android不需要更多内存,而且你的应用程序保持“缓存”状态,以备将来使用。如果你开始了一个消耗内存的游戏,那么你的应用程序就会被杀死。因此,您不能依赖在活动组件(如服务)外部运行的线程,因为它可以在任何时候被杀死。
如果你真的想退出这个应用程序,你可以尝试调用标准的System.exit(0)函数。这不一定是必需的,但您可以使用它,如果您愿意。
https://stackoverflow.com/questions/21122324
复制相似问题