可以使用Lopper.getMainLooper()将任何Handler帖子发布到mainThread

时间:2017-01-05 17:19:50

标签: android multithreading handler android-looper

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

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

new Handler(Lopper.getMainLooper()).post(new Runnable() {  
                    @Override
                    public void run() {
                        mAdapter.notifyDataSetChanged();
                    }
                });
我应该理解这里的处理程序与线程有关,但是因为我正在使用mainThreads looper,它会将runnable发送到mainThreads消息队列进行处理?如果这是真的,任何线程上的任何处理程序都可以接受另一个线程looper发布到它?那是对的吗?

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

2 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:1)

是的,你做对了。

  1. 一个线程只能有一个唯一的Looper,并且可以有许多与之关联的唯一处理程序。
  2. Handler与通过线程的Looper实例化它的线程隐式关联。您也可以通过在构造函数中传递其Looper来将Handler与任何线程绑定。
  3. 我建议您先看一眼this article,以便更好地理解这个问题。