看到一篇文章说handler不能跨线程。
http://blog.csdn.net/nieweilin/archive/2010/10/30/5976820.aspx
这里记住:Android里并没有Global的Message Queue数据结构,例如,不同APK里的对象不能透过Massage Queue来交换讯息(Message)。例如:线程A的Handler对象可以传递消息给别的线程,让别的线程B或C等能送消息来给线程A(存于A的Message Queue里)。线程A的Message Queue里的讯息,只有线程A所属的对象可以处理。

解决方案 »

  1.   

    呵呵,若是可以跨线程,那么还要Content Provider 做什么呢?
      

  2.   

    A到B,应该是没问题的,只是要注意多线程的各种问题。A到C,不可以。A和C是同一线程,非A即C,在A时,C可能没启动,到C时,A可能已经死了(看Activity的生命周期)。
    如果二者都活着,不管A的还是C的,post后应该都是post到当前活动的那个Activity,因为他们是在一个线程。
      

  3.   

    如果A到B没问题,可以在B中执行A的handler方法,那不就是可以跨线程了吗?
    晕了~~~
      

  4.   

    post,就是一个enqueue动作,一般就是一个ArrayList的Insert动作。如果你做过嵌入式开发的话,应该会用过嵌入式的多线程通信。一般都是其他线程post消息给某一个线程,这个线程收post到的消息后处理。很少有情况会本线程post消息给本线程,因为这没意义。 post消息主要就是为多线程通信用的。Android的Handler封装没仔细看过,不过推断是逃不过这个圈圈的。
      

  5.   

    但是,例如用handler更新下载进度条progressbar,在内部类中用handler发消息更新UI,这种都是在同一个线程中的。
      

  6.   

    说错了,进度条那是在UI主线程中new了一个子线程,还是在不同的线程中。
      

  7.   

    也就是说,可以Handler可以跨线程,但是Hanlder必须在它所属的线程里面执行handlerMessage处理来处理handler发送的消息。
      

  8.   

    Handler 就是为了跨线程的, Handle 只是与Looper 打交道的一个手段, Android 自动为 UI 线程, 也就是主线程创建了Looper, 所以你用Handle 可以用 poster 的方式更新view。“Handler可以用来更新UI主线程的View,那么,可以在不同的线程中操作主线程的handler对象吗?”
     =》 当然可以, 你写不写Handler UI Looper 都放在那里, 不论几个handler, 实际操作的都是UI 线程的Looper对于Job Thread, android, 没有创建Looper ,但是你可以自己创建, 所以也可以用类似的方法。“Content Provider” 一般是为了跨进程用的
      

  9.   

    肯定可以的,handler就是为了解决线程与UI互操作上实现的一个类
       你可以在B类的线程里面通过静态调用方式调用A的handler进行发送消息
      

  10.   

    每个线程有自己的Looper,handler可以跨线程
      

  11.   

    因该是可以跨线程的,你看看WINDOWS上面就知道了
      

  12.   

    说的细点, 可以跨线程, 理由如下1) Android Document 原文:
    “There are two main uses for a Handler: (1) to schedule messages and
      runnables to be executed as some point in the future; and (2) to enqueue
       an action to be performed on a different thread than your own.”
     =》 Handler 有两个主要用途 (1)调度消息和Runnable (2)在其他线程, 而不是Handler自己所在的线程(on a different thread than your own)排队执行一个动作2) Handler 有一个Public 的函数, 此函数的说明为
     /* The runnable will be run on the thread to which this handler is attached. */
    public final boolean post(Runnable r)   把一个runnable对象放到其他线程中执行
      

  13.   

    从http://blog.csdn.net/nieweilin/archive/2010/10/30/5976820.aspx来看:
    在onTouch里面:
    handler = getHandler(tv_call_no, text);
    那么这个handler是在UI线程;
    接下来启动线程:
    thread = new Thread(Runablerun);
    thread.start();注意Runablerun的run函数里面,有如下语句:
    Message msg = handler.obtainMessage();这难道不是在工作线程里面访问UI线程里面的Handler吗?
      

  14.   

        应该能跨线程吧。
         个人理解,Handler应该是类似Windows平台中对于WM_USER消息和消息泵的一种封装,使其更容易使用。