看到一篇文章说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所属的对象可以处理。
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所属的对象可以处理。
如果二者都活着,不管A的还是C的,post后应该都是post到当前活动的那个Activity,因为他们是在一个线程。
晕了~~~
=》 当然可以, 你写不写Handler UI Looper 都放在那里, 不论几个handler, 实际操作的都是UI 线程的Looper对于Job Thread, android, 没有创建Looper ,但是你可以自己创建, 所以也可以用类似的方法。“Content Provider” 一般是为了跨进程用的
你可以在B类的线程里面通过静态调用方式调用A的handler进行发送消息
“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对象放到其他线程中执行
在onTouch里面:
handler = getHandler(tv_call_no, text);
那么这个handler是在UI线程;
接下来启动线程:
thread = new Thread(Runablerun);
thread.start();注意Runablerun的run函数里面,有如下语句:
Message msg = handler.obtainMessage();这难道不是在工作线程里面访问UI线程里面的Handler吗?
个人理解,Handler应该是类似Windows平台中对于WM_USER消息和消息泵的一种封装,使其更容易使用。