public class TestHandler extends Activity {
Button m_startbtn ;
Button m_endbtn;
MyThreadHandler m_threadHandler;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
System.out.println(Thread.currentThread().getId());
m_startbtn = (Button)findViewById(R.id.start);
m_startbtn.setOnClickListener(new StartOnClickListener());
new MyThread().start();
}
class StartOnClickListener implements OnClickListener
{
@Override
public void onClick(View v) {
//在主线程中获取子线程的message对象然后再发送
Message msg = m_threadHandler.obtainMessage(1,1,1,"主线程发消息了");
m_threadHandler.sendMessage(msg);
}
}
class MyThread extends Thread
{
@Override
public void run()
{
//创建该线程的Looper对象,用于接收消息
Looper.prepare();
//线程的looper创建的handler表示消息接收者是子线程
m_threadHandler = new MyThreadHandler(Looper.myLooper());
//循环从MessageQueue中取消息。
Looper.loop();
}
}
class MyThreadHandler extends Handler
{
public MyThreadHandler(Looper loop)
{
super(loop);
}
@Override
public void handleMessage(Message msg)
{
super.handleMessage(msg);
//消息处理
System.out.println("我是子线程的Handler,收到了消息:"+(String)msg.obj);
}
}
}
分享到:
相关推荐
本示例"android 主线程给子线程发送消息"是通过`Handler`机制来实现通信的,这是一个关键的多线程同步技术。 `Handler`是Android中用于在线程间传递消息和调度任务的工具,尤其是主线程与工作线程之间的通信。下面...
- **消息队列(Message Queue)**:子线程可以通过PostMessage或SendMessage函数向主线程的消息队列发送消息,主线程的窗口消息循环会处理这些消息。 - **共享内存(Shared Memory)**:创建一段共享内存,子线程...
- Handler: 主线程中的Handler对象可以接收并处理由其他线程(通常是子线程)通过Looper和Message发送的消息。Message对象可以携带数据,这样子线程就可以将数据封装在Message中,然后通过Handler发送到主线程。 -...
5. **发送消息**:在主线程中,通过之前创建的主线程Handler使用`sendMessage()`或`post()`方法向子线程的Handler发送Message。 6. **处理消息**:子线程的Handler会在其Looper的消息循环中接收到主线程发送的消息...
这里我们主要讨论如何在Qt子线程中处理数据并将其安全地发送到主线程,以便在QTableWidget中显示。 首先,我们要明白Qt的线程模型。主线程通常负责处理GUI事件,而子线程则可以执行计算密集型任务。在多线程环境中...
本文将深入探讨Android主线程(也称为UI线程)、子线程以及它们之间的通信方式,结合"android主线程、子线程及线程间通信方式测试app"的描述,我们将详细分析相关知识点。 1. **Android主线程**:主线程是应用程序...
我们可以通过Handler的post()或sendMessage()方法向消息队列发送一个Message,然后主线程的Looper会将消息分发给对应的Handler进行处理。 HandlerThread是一个特殊的Thread类,它内部已经初始化了一个Looper。我们...
QT框架在多线程编程中的应用是现代软件开发中不可或缺的一部分,特别是在处理资源密集型任务或...在实际开发中,需要根据项目需求合理设计线程结构,确保主线程和子线程间的高效协作,同时保证代码的可读性和可维护性。
在多线程编程中,子线程与主线程的交互是一个常见的需求,特别是在GUI应用程序中。主线程通常负责用户界面的更新和事件处理,而子线程则用于执行耗时的任务,以避免阻塞UI。本示例将深入探讨如何在Java或C#等支持多...
由于只有UI主线程才可以操作桌面UI,那么在多线程中,其它线程的数据若要显示出来,可以通过全局共用变量来实现,或者通过线程通信的方式来实现,本例程就是通过UI上的按钮启动线程,在线程中发送信号到UI主线程,并...
子线程通过post(Runnable)或sendMessage(Message)方法将任务发送到主线程的MessageQueue,由主线程的Looper取出并执行。 ```java // 主线程初始化Handler Handler handler = new Handler() { @Override public ...
当收到子线程发送的消息时,窗口过程函数(WndProc)会被调用。在这里,可以检查消息类型并执行相应的操作,如触发FIRE事件。 6. **使用ATL或MFC库**: 如果你正在使用ATL(Active Template Library)或MFC...
为了解决这个问题,我们可以利用Qt提供的多线程机制,将耗时操作转移到子线程执行,以确保主线程能够保持对UI的及时更新。以下将详细讲解如何在Qt中使用多线程防止界面假死,并给出一种有效的方法。 1. Qt中的线程...
1. **Handler-Message机制**:这是最常用的一种方式,通过创建Handler对象,一个线程(通常是主线程)注册Handler,另一个线程发送Message到MessageQueue,Handler会接收到Message并处理。这种方式适用于需要在特定...
- **Invoke/PostMessage机制**:在Windows平台上,可以使用`PostMessage`或`Invoke`方法将UI更新请求发送到主线程。 6. **Delphi编程环境中的实践**: - Delphi的VCL(Visual Component Library)库提供了线程...
3. 主线程向子线程发送消息:主线程可以通过创建一个与子线程`Looper`关联的`Handler`来实现这个功能。然而,由于子线程可能没有默认的`Looper`,所以我们需要在子线程内部调用`Looper.prepare()`和`Looper.loop()`...
在主线程中创建一个Handler,并在子线程中通过这个Handler发送消息来控制ProgressDialog的显示和消失。 以下是实现这一功能的基本步骤: 1. 在主线程中创建一个Handler实例,重写handleMessage()方法,用于处理子...
在Android应用程序开发中,理解和掌握UI主线程与子线程的使用至关重要,...开发者应避免在主线程中执行耗时操作,充分利用子线程和消息机制来保持应用的响应性。熟练掌握这些知识对于编写高质量的Android应用至关重要。
在Android应用开发中,UI线程(也称为主线程)负责处理用户交互和绘制界面,而子线程通常用于执行耗时操作,如网络请求、数据处理等。由于Android系统的安全机制,直接在子线程中修改UI是不允许的,因此我们需要通过...
另一方面,如果需要从非UI线程(子线程)传递消息到主线程,我们可以直接使用已经存在的主线程Looper。在主线程中创建的Handler可以直接用来接收子线程的消息。例如,在`ThreadHandlerActivity`中,我们创建了一个...