Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/336.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 处理程序和接口可运行-具有新线程_Java_Android_Multithreading - Fatal编程技术网

Java 处理程序和接口可运行-具有新线程

Java 处理程序和接口可运行-具有新线程,java,android,multithreading,Java,Android,Multithreading,我在堆栈上读到: 使用new Handler().post(r)(或Message)时,添加了 Runnable对象到Looper,并稍后在同一程序中执行代码 线 这个答案是可以接受的 所以现在我有一个难题,我上次采访的一些人给了我提示:如果你想在其他线程中运行一些东西并从这个新的线程UI更新,让我们使用一个处理程序 那么处理程序是否为新线程? 或者这个线程中的runnable可以在另一个线程上运行? 谁能给我解释一下吗 从官方文件: 处理程序有两个主要用途:(1)调度消息和 在将来某个时候执行

我在堆栈上读到:

使用new Handler().post(r)(或Message)时,添加了 Runnable对象到Looper,并稍后在同一程序中执行代码 线

这个答案是可以接受的

所以现在我有一个难题,我上次采访的一些人给了我提示:如果你想在其他线程中运行一些东西并从这个新的线程UI更新,让我们使用一个处理程序

那么处理程序是否为新线程?
或者这个线程中的runnable可以在另一个线程上运行? 谁能给我解释一下吗

从官方文件:

处理程序有两个主要用途:(1)调度消息和 在将来某个时候执行的可运行文件;及(二)至 将要在不同于您自己的线程上执行的操作排队

  • 处理程序
    不是新线程。它只是一种在UI线程中安排一些任务的机制
  • 创建/发布到
    处理程序
    不会创建新线程
  • 发布到
    处理程序的
    Runnable
    在UI线程空闲时立即在UI线程中运行

当您创建一个
Runnable
实例并发布它时,它的引用将被存储,它的
run
方法将在将来的某个时候从UI线程调用。(您还可以使用方法
postDelayed()
)指定延迟。

一个
处理程序
与一个
活套
(以及该
活套
的线程)相关联。当您调用以创建新的处理程序时,您正在将其与当前线程(当前代码运行的线程)的
活套
相关联

一旦有了这个对象,就可以从另一个线程使用它来报告结果等

例如,您可以从后台线程调用与UI线程关联的处理程序对象。当处理程序到达时,您传递的
Runnable
将由该处理程序在其线程中执行(而不是在调用
post()
函数的线程中)

有关活套和处理程序的其他信息/详细信息,请参见以下报价表:

处理程序允许您发送和处理与线程MessageQueue关联的消息和可运行对象。每个处理程序实例都与一个线程和该线程的消息队列相关联。当您创建一个新的处理程序时,它被绑定到正在创建它的线程的线程/消息队列——从那时起,它将向该消息队列传递消息和可运行文件,并在它们从消息队列中出来时执行它们

处理程序有两个主要用途:(1)安排消息和可运行文件在将来某个时候执行;和(2)将要在不同线程上执行的操作排队

这一部分相当重要:

创建新处理程序时,它将绑定到创建它的线程的线程/消息队列

Handler
不是一个新线程,当您向线程传递新的可运行文件时,它可以处理队列中的消息,而线程会处理这些消息。当您显式执行时,可以在单独的线程或线程池中处理每条消息。否则,它将在创建了
Looper
的线程中处理(它可以是main/UI线程或其他线程)


不久前,我还对这种机制感到困惑,收集了一些链接、资源,并使用
Handler
Looper
编写了示例应用程序。您可以在此处查看:。也许你会发现它很有用。

来自官方文档:“处理程序有两个主要用途:(1)安排消息和可运行文件在将来某个时候执行;(2)将要在不同线程上执行的操作排队。”请解释2?在不同于您自己的线程上执行–假设您正在后台线程中运行某个线程,并且您希望运行其他线程或将结果传递到UI线程中,您需要发布一个
Runnable