解决您的其他问题:
你说“在Android中,我们有处理程序#后(可运行)方法从另一个张贴一些代码,主线程”
这是不完全正确。如果线程B被初始化为Looper
,并且线程A对目标线程B具有对Handler
的引用,您可以从任何线程A向任何线程B发布一些代码。
当您需要在UI线程上做一些事情,因为UI线程已经有Looper
,你可以从几乎任何地方检索它。静态方法Looper.getMainLooper
是为主线程获取Looper
的一种方法。如果使用此Looper
初始化Handler
,则可以发布Runnable
或发送Message
(但如果发布Runnable
,它也会被包装为Message
),并且它将在UI线程上执行。
Looper
,作为名称提示,基本上运行一个线程的非终止循环。 Looper
有一个关联的MessageQueue
它不断地检查新的Messages.
通过Handler
初始化与Looper
你可以排队Messages
在这个线程。 Messages
按顺序处理,具体取决于Message
的when
字段。
这是一个基本的实现弯针线的:
class LooperThread extends Thread {
public Handler mHandler;
public void run() {
Looper.prepare();
mHandler = new Handler() {
public void handleMessage(Message msg) {
// process incoming messages here
}
};
Looper.loop();
}
}
我建议你阅读每棵G.B.的第5章Android Concurrency。它会让你对Looper/Handler框架有一个全面的了解。在阅读时浏览源代码也很棒,它非常简单且不言自明。
请张贴你想要做的更具体的例子。 –
GV,不,我不做Android编程,但是我做了很多Swing编码,包括使用后台线程。 –
@HovercraftFullOfEels你使用Android吗?有一个类Handler。用法很简单:新的Hanldler(Looper.getMainLooper())。post(new Runnable(){void run(){}});不管什么线程现在是最新的,run()方法只会在MainThread中调用。 –