android-在另一个线程上接收自定义事件
我正在使用一个背景线程来做一些工作。在特定条件下,我触发一个自定义事件来通知所有侦听器 我的问题是我需要在注册到事件的主线程中调用该事件处理程序,而不是在触发事件的后台线程中调用该事件处理程序 代码解释(如果有用): 背景类android-在另一个线程上接收自定义事件,android,multithreading,event-handling,runnable,Android,Multithreading,Event Handling,Runnable,我正在使用一个背景线程来做一些工作。在特定条件下,我触发一个自定义事件来通知所有侦听器 我的问题是我需要在注册到事件的主线程中调用该事件处理程序,而不是在触发事件的后台线程中调用该事件处理程序 代码解释(如果有用): 背景类 我建议使用Android SDK中的循环器和处理程序。以下是开发文档中的一个示例: class LooperThread extends Thread { public Handler mHandler; public void run() {
我建议使用Android SDK中的循环器和处理程序。以下是开发文档中的一个示例:
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();
}
}
在本例中,处理程序实例绑定到该线程,在该线程中它是createdLooperThread。稍后,您可以从另一个线程获取处理程序实例并向其发送消息。消息将在handleMessage内(即在LooperThread内)进行分发
因此,在另一个线程中,您可以执行类似以下伪代码的操作:
class MyOtherThread{
public void run(){
Handler handler = LooperThread.getHandler();
handler.sendMessage(...);
}
}
谢谢但是我是线程的初学者,你能发布一个与我的代码功能相同的完整示例吗?也许,在这个问题中,类LooperThread是不合适的,因为启动操作的线程已经存在——它是主UI线程。您将如何更改您的示例,在已经有一个正在运行的looper.loop的主UI线程上启动活动?NewHandlerLooper.getMainLooper说,但我不确定如何在这里使用它。@ToolmakerSteve我认为这取决于您试图做什么。也许是你。如果你只是想在UI线程中执行一些东西,你可以简单地用runOnUiThread包装它;同样,我不能在没有看到您的代码的情况下提出解决方案。
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();
}
}
class MyOtherThread{
public void run(){
Handler handler = LooperThread.getHandler();
handler.sendMessage(...);
}
}