任何处理程序 post 都可以使用 Lopper.getMainLooper() 到 mainThread

can any Handler post to mainThread using Lopper.getMainLooper()

假设我在我创建的另一个线程中,在 android 中我执行以下操作:

//this is called from another thread (not mainTread)

new Handler(Lopper.getMainLooper()).post(new Runnable() {  
                    @Override
                    public void run() {
                        mAdapter.notifyDataSetChanged();
                    }
                });

我是否理解这里的处理程序与线程相关联,但由于我使用的是 mainThreads 循环程序,它将把 runnable 发送到 mainThreads 消息队列进行处理?如果那是真的,任何线程上的任何处理程序都可以接受另一个线程循环程序到 post 吗?对吗?

或者是 "new Handler(Lopper.getMainLopper())" 使它成为 mainThread 处理程序?

试试这个...将 Looper.getMainLooper() 替换为 context.getMainLooper()。这应该有效。

new Handler(context.getMainLooper()).post(new Runnable() {  
                    @Override
                    public void run() {
                        mAdapter.notifyDataSetChanged();
                    }
                });

是的,你没看错。

  1. 一个线程只能有一个唯一的 Looper,并且可以有多个与之关联的唯一 Handler。
  2. Handler 与通过线程的 Looper 实例化它的线程隐式关联。您也可以通过在构造函数中传递其 Looper 来将您的 Handler 与任何线程绑定。

我建议看一眼this article,以便更好地理解这个问题。