2010-02-10 29 views
0

当我加载我的应用程序时,我还会加载和Android服务,以帮助我从互联网上下载文件。关闭具有活动主题的服务

用户可能在任何给定的时间有一个或多个下载,全部在他们自己的由服务管理的Thread中。

如果用户按下home按钮,我不会销毁服务,而是让它运行,但是,如果用户按下后退按钮,我会停止()服务,因为我觉得这是正确的做法用户不希望流浪服务运行)。

这工作正常,除非有尚未完成的流浪线程(这可能发生在互联网连接未激活等情况下)。

我该如何处理?我怎么能停止所有线程,因为我没有引用他们......或者某种程度上,一旦所有线程完成并且我的应用程序已关闭,就会通过android命令停止我的服务?

+0

您是否尝试过使用布尔标志并在下载完成时将它们设置为true,并且只有在所有标志都设置为true时才停止服务? – 2010-02-10 09:30:05

+0

不,我没有试过这 – jax 2010-02-10 12:17:14

回答

1

不要在每次下载时分叉线程。将作业发布到工作队列(例如,LinkedBlockingQueue)并使线程池工作。使该队列成为优先级队列,您可以安排在该队列上发布作业,以告知后台线程在完成当前下载后停止。

+0

我实际上使用了Executors.newCachedThreadPool(),但你的回复帮助我发现了这个美妙的类 – jax 2010-02-12 14:50:05