0

我有一个基本上看起来像这样的线程:

public void run() throws InterruptedException {
   while(true) {
         String curUrl = taskQueue.take();
         ...
   }
}

我知道我可以更改true为 volatile 变量,并在不再需要它时将其设置为 false,但它在我的整个应用程序中使用,因此很难判断何时不再需要它。

我想知道如果即使我的应用程序没有运行,如果它处于阻塞状态,无限循环是否会对 Android VM 的其余部分的性能产生明显影响。

编辑1:启动线程的代码只会在它尚未运行时启动它。

4

2 回答 2

1

由于 taskQueue 是一个阻塞队列,所以没有。让这个线程在应用程序的整个生命周期中运行不会造成任何明显的影响。

如果 TaskQueue 不是阻塞,那么它会。您的应用程序将尽可能快地消耗几乎整个核心的处理能力循环。

阻塞队列将导致调用方法“take”的线程停止,直到有一些结果可以返回。非阻塞队列将返回 null 或抛出异常。

于 2013-07-03T20:34:07.857 回答
1

Android 将在您的应用程序不被使用时终止它的进程,这将包括终止您的等待线程,因此通常在用户切换到其他任务后它不会停留很长时间。如果很难知道何时不再需要它,我不会担心。

于 2013-07-03T20:36:39.707 回答