首页 > 解决方案 > 这些在 UI 线程上运行代码的方法有什么区别?

问题描述

关于如何在 UI 线程上运行代码,网上发布了不同的方法。它们都完成相同的任务,但是,我真的很想知道这些方法之间的区别。

方法一:

new Handler(Looper.getMainLooper()).post(new Runnable() {
    @Override
    public void run() {
        // Code here will run in UI thread
    }
});

方法二:

new Handler().post(new Runnable() {
    @Override
    public void run() {
        // Code here will run in UI thread
    }
});

方法三:

 runOnUiThread(new Runnable() {
     @Override
     public void run() {
     // Code here will run in UI thread
     }
 });

标签: androidandroid-handlerandroid-looperandroid-threadandroid-threading

解决方案


方法 1 将始终有效。

方法 2 仅在您已经在 UI 线程上时才有效 - 没有 Looper 参数的新处理程序会为当前线程创建一个处理程序(如果当前线程上没有 Looper,则会失败)。

方法三需要在Activity中完成或者在Activity对象上调用,因为runOnUiThread是Activity的一个函数。但在引擎盖下,它会做与 1 相同的事情(尽管可能会保留一个 Handler 以提高效率,而不是总是新的)。


推荐阅读