Android 线程池在后台状态后无需执行即可构建可运行对象

发布于 2024-10-14 09:04:07 字数 264 浏览 5 评论 0原文

我的应用程序有一个线程池,它创建 3 个并发线程。当我调用可运行对象时,它们被添加到我的线程池中。

当应用程序进入后台一段时间时,我的问题就会发生。最终,我的线程停止执行池中的可运行对象,并且池继续增长。即使我将应用程序带回前台,我的线程也不会再次开始运行。

我的理论是,当我的应用程序进入后台时,我的线程将被终止。我不确定通过什么,也不确定有什么好方法来确定我的线程是否被终止,以便我可以再次启动它们。

对于我可以寻找的东西来确定线程是否已被终止,您有什么建议吗?

My application has a thread pool that creates 3 simultaneous threads. As I invoke runnables, they are added to my thread pool.

My problem happens when the application goes to the background for a while. Eventually, my threads stop executing the runnables in my pool and the pool just continues to grow. Even if I bring my application back to the foreground, my threads do not start running again.

My theory is that when my application goes to the background that my threads are being killed. I'm not sure by what and I'm also not sure of a good way of determining whether my threads are killed so that I can start them again.

Do you have any suggestions as to something I can look for to determine whether or not a thread has been killed?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

懷念過去 2024-10-21 09:04:07

您不能使用线程池在后台执行代码,因为 Android 活动生命周期不会认为您的应用程序处于活动状态,并且最终会在您失去 UI 焦点后杀死您的进程(包括所有线程)。您想要的是具有不同生命周期的 Android Service 。为了完成这样的事情,我们使用带有 Handler 和 HandlerThread 的本地服务,我们可以将 Runnables 发布到其中。您可能会想要类似的东西。

注意:每次我这样做时,我都觉得一定有一种更简单的方法,所以如果有人简化了这个模式,可能值得搜索。

You can't use a thread pool to execute code in the background because the Android activity lifecycle won't consider your app to be active, and will kill your process (including all threads) eventually after you lose UI focus. What you want is an Android Service which has a different lifecycle. To do things like this we use a local service with a Handler and a HandlerThread that we can post Runnables into. You'll probably want something similar.

Note: Every time I do this I feel like there must be an easier way, so it might be worth searching if someone has simplified this pattern.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文