Android 活套还是在线程中?

Android 活套还是在线程中?,android,multithreading,Android,Multithreading,我在试着理解活套 这次我有点困惑,因为(到目前为止)我只使用while(true)条件来维护无限循环中的线程 我只是想知道使用活套还是while(true)条件更好 我在互联网上搜索了我的问题的可能答案,但我很失望地找到了同时使用Looper和while(true)的代码 也许我不明白使用活套的意义,但是,你知道,我们在这里学习。。。是吗?是一种机制,它使线程对通过发送给它的进程保持开放。从这个意义上讲,它们类似于while(true),因为线程永远保持打开状态(或者在本例中,直到您明确告诉它关

我在试着理解活套

这次我有点困惑,因为(到目前为止)我只使用while(true)条件来维护无限循环中的线程

我只是想知道使用活套还是while(true)条件更好

我在互联网上搜索了我的问题的可能答案,但我很失望地找到了同时使用Looper和while(true)的代码

也许我不明白使用活套的意义,但是,你知道,我们在这里学习。。。是吗?

是一种机制,它使线程对通过发送给它的进程保持开放。从这个意义上讲,它们类似于
while(true)
,因为线程永远保持打开状态(或者在本例中,直到您明确告诉它关闭)。但是,与
while(true)
不同,您可以从另一个线程向它发送消息。每次创建
处理程序
,它都会将自身绑定到创建它的
循环器
线程。然后,每次您向该
处理程序发布消息时,它都会在创建该消息的线程上处理该消息

Android中最常见、最著名的
Looper
线程是主UI线程。此线程始终在运行。它运行发布到它的代码。最常见的绘图操作,但如果您查看并调用
view#post
,它将在下一个绘图周期中运行代码。这是因为所有
视图
对象都有一个
处理程序
,该处理程序构建在主UI循环器线程上

UI Looper实际上可以被引用到
Looper.getMainLooper()
方法,并且您可以创建一个
处理程序
,该处理程序向该线程发送消息,如下所示:
新处理程序(Looper.getMainLooper())

不过,如果需要,您可以创建自己的
活套
线程,作为UI线程的并行线程。您不能在其上执行绘图操作,但可以将其用作其他操作的辅助线程。这样,您就不必在每次需要执行密集型任务时都创建一个新线程

我只是想知道使用活套还是while(true)条件更好

我想说,作为一般规则,除非您需要一些非常特定的低级控制,使用框架提供的API,无论框架是什么

它们通常负责许多方面,否则您将自己实现它们,例如消息传递、任务删除等

我猜通过
while(true)
循环,您正试图实现一些常规的任务重复

在这种特殊情况下,是的,将
处理程序
与自己的
循环器
一起使用,这样UI线程就不会被阻塞,并使用
postDelay(Runnable,long)
定期发布
Runnable
实例


@DeeV的回答已经让您对上述组件有了很好的理解,但您肯定会在Android文档中找到您需要的所有内容

几天前,我在这里研究多线程,发现了这个答案和这个讲座。答案-讲座-文档-在本例中,这当然是一项令人望而生畏的任务,但这些应该可以帮助您解决这些文档中讨论处理程序线程asynctask和handlerthread之间的区别。也许我无法传达我问题的目的。我想了解使用Looper类是否比在Thread类的run方法中使用while(true)条件更好。。。正如我在internet()中看到的,我可以使用Looper在队列中启动runnables。它是否比使用while(true)条件更好?若有,原因为何?我们必须结合使用它们?如果是,为什么?可能是重复的而不是重复的,DeeV完全明白了这一点。这就是我想要的答案,谢谢@DeeV。你能不能说,在某些情况下(至少有一种情况)同时使用Looper和while(true)是有意义的?@AndreaZedda否。没有必要同时使用这两种方法。Looper功能更强大,因此我建议您在
while(true)
@AndreaZedda Looper是结构良好的替代品,可以替代
while(true)
好的。您的两个答案对我都非常有帮助,它们肯定会引起思考。我之所以怀疑是因为我看到其他人(谈论类似的话题)一起使用它们。无论如何,谢谢!!:)你让我开心