Activity代码:
public class MainActivity extends Activity { private MyThread myThread; private Handler handler; //子线程与UI主线程进行消息通信 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); //通过Handler获取子线程推送过来的消息 handler = new Handler(){ @Override public void handleMessage(Message msg) { super.handleMessage(msg); Bundle bundle = msg.getData(); String value = bundle.getString("value"); outputEditText.setText(value); } }; //启动一个子线程 myThread = new MyThread(handler); myThread.start(); showDialog("Socket Thread Started!"); } /** * 对话框显示 */ private void showDialog(String msg){ new AlertDialog.Builder(this) .setTitle("提示") .setMessage(msg) .setPositiveButton("ok", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { } }).show(); } }
Thread代码:
public class MyThread extends Thread{ private Handler handler; public MyThread(Handler handler){ this.handler = handler; } @Override public void run() { try { //持续向UI主线程发送当前日期时间 while(true){ TimeUnit.MILLISECONDS.sleep(1000); SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); String date = sdf.format(new Date()); sendMessage(date); } } catch (Exception e) { e.printStackTrace(); } } /** * 向UI主线程发送消息 */ private void sendMessage(String msg){ Bundle data = new Bundle(); data.putString("value", msg); Message message = new Message(); message.setData(data); this.handler.sendMessage(message); } }
需要刷新UI时的Handle实例化:
在主线程中: Handler handler = new Handler();
在其他线程中: Handler handler = new Handler(Looper.getMainLooper());
不用刷新UI时的Handle实例化:
在主线程中: Handler handler = new Handler();
在其他线程中:
Looper.prepare();
Handler handler = new Handler();
Looper.loop();
或者
Handler handler = new Handler(Looper.getMainLooper());
message.what一般用于区别消息的。进程内传递数据可用setData(Bundle),进程间要用message.obj传递可序列化对象数据
相关推荐
本示例"android 主线程给子线程发送消息"是通过`Handler`机制来实现通信的,这是一个关键的多线程同步技术。 `Handler`是Android中用于在线程间传递消息和调度任务的工具,尤其是主线程与工作线程之间的通信。下面...
在Android应用开发中,UI线程(也称为主线程)负责处理用户交互和绘制界面,而子线程通常用于执行耗时操作,如网络请求、数据处理等。由于Android系统的安全机制,直接在子线程中修改UI是不允许的,因此我们需要通过...
- Looper: 这是Android主线程的一个消息循环,它不断地从消息队列中取出Message并分发给对应的Handler进行处理。 - MessageQueue: 消息队列,存储待处理的消息。 2. iOS中的GCD (Grand Central Dispatch) 和...
1. **Handler-Message机制**:这是最常用的一种方式,通过创建Handler对象,一个线程(通常是主线程)注册Handler,另一个线程发送Message到MessageQueue,Handler会接收到Message并处理。这种方式适用于需要在特定...
标题“子线程接收主线程发送的消息”涉及到的是Android中的Handler机制,这是一种处理线程间通信的方式。我们首先来详细解释一下Handler、Looper和Message这三个关键组件。 **Handler** 是一个消息处理对象,它与...
本文将深入探讨Android主线程(也称为UI线程)、子线程以及它们之间的通信方式,结合"android主线程、子线程及线程间通信方式测试app"的描述,我们将详细分析相关知识点。 1. **Android主线程**:主线程是应用程序...
2. **子线程向主线程发送消息**:在子线程(这里是指HandlerThread)中,同样创建一个Handler,但这个Handler需要关联到主线程的Looper。子线程中的任务完成后,可以通过这个Handler发送Message回主线程。 3. **...
通过这样的方式,我们可以在子线程处理数据后,通过消息机制将结果传递到主线程,由主线程安全地更新UI。 此外,还有一种常见的替代方案是使用`AsyncTask`类,它同样支持在后台线程执行任务并在适当的时候更新UI。...
主线程的Handler接收到Message后,会在`handleMessage(Message msg)`方法中处理这个消息。这里可以将结果解析出来,并更新UI。 以下是一个简单的代码示例: ```java public class MainActivity extends ...
Handler是Android中一种常用的消息机制,它允许我们在子线程中创建,并通过Looper在主线程中分发消息或Runnable对象。创建Handler时,需要指定Looper,通常在主线程中默认就有Looper。子线程通过post(Runnable)或...
- **Handler**:用于发送消息和处理消息的对象,可以在子线程中向主线程发送消息,从而更新UI。 ### 2. 实现步骤 #### 步骤一:定义Handler ```java private Handler mHandler = new Handler() { public void ...
Android-dialog库针对这些需求进行了优化,提供了更简洁的API,允许开发者在子线程中预处理Dialog的相关数据,然后在合适的时候切换到主线程进行显示,避免了阻塞UI。这种设计遵循了Android的异步编程原则,使得代码...
因此,更新UI时需要确保在主线程中执行,或者在子线程中正确地使用Handler来将消息传递到主线程进行更新。 ### 知识点九:耗时操作的处理策略 对于耗时操作,Android提供了异步任务AsyncTask,它封装了线程池和...
例如,在工作线程中执行耗时操作,完成后通过Handler向主线程发送消息,主线程接收到消息后更新UI。这样,既保证了UI的流畅性,又实现了后台任务的执行。 六、Handler的最佳实践 1. 避免内存泄漏:Handler的引用...
子线程通过调用 `sendMessage()` 或 `post()` 方法将 `Message` 对象或 `Runnable` 对象发送到 Handler,这些对象随后会被添加到主线程的消息队列中。主线程中的 Looper 循环不断地取出队列中的消息并交给关联的 ...
1. 主线程:每个Android应用都有一个主线程,它负责初始化Activity、BroadcastReceiver、Service等组件,并处理来自用户的输入事件。主线程遵循单线程模型,确保UI组件的操作按顺序执行,避免了竞态条件和不必要的...
在Android开发中,由于UI操作必须在主线程中执行,因此当我们在子线程中处理数据后,需要将结果安全地传递到主线程进行UI更新。以下将详细讲解三种在子线程中更新UI线程的方法,特别是Handler的两种用法。 1. ...
- Handler通常与Looper和Message配合使用,允许子线程向主线程发送消息,进而更新UI。 - Looper是消息循环器,用于处理MessageQueue中的消息,通常主线程默认有Looper,子线程需要手动添加。 3. **AsyncTask**: ...
在主线程中创建一个Handler,并在子线程中通过这个Handler发送消息来控制ProgressDialog的显示和消失。 以下是实现这一功能的基本步骤: 1. 在主线程中创建一个Handler实例,重写handleMessage()方法,用于处理子...
在Android应用程序开发中,理解和掌握UI主线程与子线程的使用至关重要,因为它们直接影响到应用的性能和用户体验。UI主线程,也称为应用程序主线程或活动线程,是每个Android应用的核心部分,主要负责处理用户界面的...