Handler handler=new Handler();
handler.post(r);Runnable r=new Runnable(){
       public void run(){
           //具体操作
       }
};
我们都知道通过handler的post方法调用是将一个Runnable对象放入到消息队列中,其中run方法内的部分也是在主线程中执行的,而没有去开辟一条新线程。那既然这样 handler的post方法存在的意义是什么,我们完全可以将run部分的代码直接写在主线程内啊,何必多此一举,希望大神指点。

解决方案 »

  1.   

    1、如果将run部分的代码直接写在主线程内,如何放入消息循环。
    2、run方法在创建handler的线程中执行,这个线程必须要有消息循环,但不一定是主线程。
      

  2.   

    1 Handler的post衍生版本很多,可以对消息或者runnable对象进行调度,让他们在某些时刻顺序执行。
    2 主线程中post一个runnable,UI是被阻塞了,方法会立刻返回继续往下执行。
    3 一个handler不一定在Main Thread中,可以顺序post很多Runnable对象,莫非都直接放到主线程中顺序执行?
      

  3.   

    因为在主线程ActivityUI中不允许耗时操作,即终不能直接进行组件更新,所以我们要单独的创建一个线程来操作Ui组件,可以借助异步工具类AsyncTask ,在Activity,自动回调doinback()方法, 另一个就是消息机制 handler -message ,在activity 中,实例化一个Handler对象,即开通了一个线程通道,而用Handler.post(runnable),将子线程放到线程通道中,等到cpu调度执行,其实也是就是调用Runable的run()方法。减少耗时操作,防止Activity阻塞死亡。