3

假设我在我创建的另一个线程中,在 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 消息队列进行处理?如果这是真的,任何线程上的任何处理程序都可以接受另一个线程循环器发布到它?那是对的吗 ?

还是“new Handler(Lopper.getMainLopper())”使它成为 mainThread 处理程序?

4

2 回答 2

2

是的,你没看错。

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

我建议看一下这篇文章,以更好地理解这个问题。

于 2017-01-05T20:38:33.620 回答
1

试试这个...替换Looper.getMainLooper()context.getMainLooper().This 应该工作。

new Handler(context.getMainLooper()).post(new Runnable() {  
                    @Override
                    public void run() {
                        mAdapter.notifyDataSetChanged();
                    }
                });
于 2017-01-05T17:36:23.183 回答