Android 关闭具有活动线程的服务

Android 关闭具有活动线程的服务,android,Android,当我加载我的应用程序时,我也会加载Android服务,帮助我从互联网下载文件 用户在任何给定时间都可能有1个或多个下载,所有下载都在由服务管理的自己的线程中 如果用户按下home(主页)按钮,我不会破坏服务,而是让它运行。但是,如果用户按下back(返回)按钮,我会停止()服务,因为我认为这是正确的做法(用户不希望服务运行) 除非有尚未完成的杂散线程(如果internet连接未处于活动状态等,则可能会发生这种情况),否则此操作正常 我该怎么办?我怎么能停止所有线程,因为我没有引用它们……或者在所

当我加载我的应用程序时,我也会加载Android服务,帮助我从互联网下载文件

用户在任何给定时间都可能有1个或多个下载,所有下载都在由服务管理的自己的线程中

如果用户按下home(主页)按钮,我不会破坏服务,而是让它运行。但是,如果用户按下back(返回)按钮,我会停止()服务,因为我认为这是正确的做法(用户不希望服务运行)

除非有尚未完成的杂散线程(如果internet连接未处于活动状态等,则可能会发生这种情况),否则此操作正常


我该怎么办?我怎么能停止所有线程,因为我没有引用它们……或者在所有线程完成且我的应用程序关闭后,以某种方式命令android停止我的服务?

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

您是否尝试过使用布尔标志,并在下载完成后将其设置为true,并且仅在所有标志都设置为true时停止服务?我实际使用了Executors.newCachedThreadPool()但是你的回答帮助我发现了这个精彩的课堂