【问题标题】:What are Handlers and Runnables for in Android?Android 中的 Handlers 和 Runnables 有什么用?
【发布时间】:2023-03-29 19:18:01
【问题描述】:

Android 中的 Handlers 和 Runnables 的概念让我无法接受。有人可以给我关于 Handlers 和 Runnables 的详细解释吗?它们的语法和实现?我已经阅读了很多关于这方面的文章,但这些概念仍然不清楚,甚至已经部署在 Java 中。在此先感谢

【问题讨论】:

标签: android kotlin


【解决方案1】:

我将尝试简化,如果不是 100% 准确,请耐心等待。

基本上,处理程序用于与与Thread 关联的MessageQueue 通信。 如果你在主线程上,或者如果你在你所在的Thread 中调用了Looper.prepare(),它有一个Looper,它基本上是MessageQueue 的持有者。

这个队列不断被轮询,所以每当一个Message 进入它时,它就会在与这个MessageQueue 关联的线程上处理

如果您尝试在特定的Thread 上执行一段代码,则必须使用Runnable。它只是一个具有void run() 方法的接口,该方法将由 Looper 在其Thread 上执行。

假设您正在执行网络请求,您希望它发生在另一个 Thread 上,但是当您获得结果时,您需要以某种方式将数据传递回 Main Thread 以更新您的 UI,因为 @ 987654335@s 不能从另一个 Thread 修改。 你会这样做:

// This will let you run method on main thread (even if you're not on main thread)
private final Handler handler = new Handler(Looper.getMainLooper());

// This will let you run method on background thread
private final Executor executor = Executors.newSingleThreadExecutor();


public void doSomething() {
    // posting to executor will go to background thread
    executor.post(new Runnable() {
        @Override
        public void run() {
            // This will now run on background thread
            // you can for example do network request here

            // posting to handler will go back to main thread
            handler.post(new Runnable() {
                @Override
                public void run() {
                    // This will execute on the Main Thread
                }
            });
        }
   });
}

【讨论】:

  • 对您提出这个问题并提供的答案印象深刻,如果不是详尽无遗,无疑是有用的。干得好。
  • 非常感谢您为阐明这些概念的使用所付出的努力和时间。从这里开始,我一定能找到自己的路。再次感谢
猜你喜欢
  • 1970-01-01
  • 2016-08-12
  • 1970-01-01
  • 1970-01-01
  • 2015-04-08
  • 2011-08-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多