知识点
接受子线程发送的消息数据,并用此消息数据配合主线程更新UI。
根据消息数据中的标识msg.what,分类处理相应的操作。
范例程序
为了让线程对象Runnable运行过程中,可以不断地将信息往Activity传递,所以用了Android.os.Handler对象及Android.os.Message对象,且在类成员变量中声明了两个整数:STOP_NOTIFIER与RUNNING_NOTIFIER,这两个整数将作为信息传递出来时的信号标识,前者为线程对象Runnable需要喊停的标识,后者为线程对象Runnable正在运行的标识。
本范例中,摆放一个按钮和一个进度条控件。按钮用于复位参数和启动线程对象Runnable。
具体代码如下:
- package com.lyg.progressbarhandler;
-
- import android.app.Activity;
- import android.os.Bundle;
- import android.os.Handler;
- import android.os.Message;
- import android.util.Log;
- import android.view.View;
- import android.view.View.OnClickListener;
- import android.view.Window;
- import android.view.WindowManager;
- import android.widget.Button;
- import android.widget.ProgressBar;
-
- public class progressBarHandler extends Activity {
-
-
- protected static final int STOP_NOTIFIER = 0x108;
- protected static final int RUNNING_NOTIFIER = 0x109;
-
- private Button bnStart;
- private ProgressBar progBar;
-
- @Override
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
-
-
-
- requestWindowFeature(Window.FEATURE_NO_TITLE);
- getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
- WindowManager.LayoutParams.FLAG_FULLSCREEN);
-
- setContentView(R.layout.main);
-
- progBar = (ProgressBar) findViewById(R.id.progressbar);
- bnStart = (Button) findViewById(R.id.bnstart);
- bnStart.setOnClickListener(new bnStartOnClickListener());
-
-
- progBar.setProgress(0);
-
- }
-
- class bnStartOnClickListener implements OnClickListener{
-
- @Override
- public void onClick(View arg0) {
-
-
- Log.d("lyg", "onClick-->id="+Thread.currentThread().getId()+" name="+Thread.currentThread().getName());
-
- progBar.setProgress(0);
-
-
- handler.post(runable);
- }
- }
-
-
- Handler handler=new Handler(){
- @Override
- public void handleMessage(Message msg) {
-
- super.handleMessage(msg);
- System.out.println("Handler handleMessage");
- switch(msg.what)
- {
- case STOP_NOTIFIER:
- {
- progBar.setProgress(msg.arg1);
- handler.removeCallbacks(runable);
- }
- break;
- case RUNNING_NOTIFIER:
- {
- progBar.setProgress(msg.arg1);li
分享到:
相关推荐
理解Thread、Looper、Handler、Message、MessageQueue和MessagePool之间的关系对于优化Android应用的性能和响应速度至关重要。开发者需要熟练掌握这一机制,以便在多线程环境中正确处理异步任务,保证UI的流畅性。在...
在主线程中,一个Handler对象可以接收并处理由其他线程(如工作线程)通过MessageQueue发送的消息。创建Handler时,通常会关联到一个Looper,这个Looper负责从MessageQueue中取出消息并分发给对应的Handler。 接着...
`Message` 是一个轻量级的对象,用于在`Handler`之间传递数据。它包含了要传递的信息,如整型值、字符串或者自定义对象。`Message`可以通过`obtain()`静态方法复用,以减少内存分配。`Message`还有一个`.what`字段...
此外,还可以通过Handler对象的`obtainMessage()`方法来获取一个Message实例。 当调用`removeMessages()`方法时,将会把Message从MessageQueue中删除,并同时放入到MessagePool中以便后续重复使用。 ##### 3、...
在Android应用开发中,HandlerMessage1_HandlerMessage是一个关键的主题,涉及到Android系统中的消息处理机制,尤其是Handler、Message和Looper的使用。这些组件是Android异步编程的重要组成部分,用于解决UI线程与...
本压缩包"Android应用源码之HandlerMessage2_应用.zip"包含了关于如何在Android应用中使用Handler和Message来处理异步任务和更新UI的示例源代码。下面我们将深入探讨这两个核心组件以及它们在Android中的工作原理。 ...
8. **Message的target属性**:除了Handler外,Message还可以设置其他目标,比如其他实现了Runnable接口的对象,这样可以在不直接使用Handler的情况下分发消息。 9. **自定义Looper**:虽然默认的Looper已经满足...
【Android应用源码之HandlerMessage1.zip】是一个与Android应用程序开发相关的压缩包,重点在于讲解Handler和Message在Android系统中的使用。在这个项目中,我们可能会看到一个简单的Android应用实例,该实例展示了...
在Android开发中,`Handler`、`Message`和线程管理是至关重要的概念,尤其是在创建实时更新的应用,如时钟程序时。让我们深入探讨这些概念,并通过一个简单的时钟程序来理解它们的工作原理。 首先,我们需要了解...
在Android应用开发中,HandlerMessage是一个关键的概念,用于在主线程和子线程之间进行通信。这个"Android应用源码之HandlerMessage3.zip"压缩包很可能是包含了一个示例项目,详细展示了HandlerMessage的用法。现在...
// 在主线程中创建Handler对象 Handler mHandler = new Handler() { @Override public void handleMessage(Message msg) { // 接收消息并处理 switch (msg.what) { case EVENT_GET_SRV_STATUS: // 更新UI或...
本资料“应用源码之HandlerMessage1.zip”聚焦于这一主题,提供了源码级别的学习材料,帮助开发者深入理解Android异步编程的核心。 首先,我们来探讨`Handler`。`Handler`是Android中的一个类,它允许开发者在不同...
在Android应用开发中,Handler、Message以及Looper是三个至关重要的组件,它们构成了Android中的消息处理机制,用于在主线程和子线程之间进行通信。这个压缩包“Android应用源码之HandlerMessage3_Android.zip”显然...
`HandlerMessage2.zip`这个资源可能包含了一个关于如何使用`Handler`和`Message`进行异步操作和线程通信的实际应用源码示例。下面将详细阐述`Handler`、`Message`以及它们在Android中的工作原理。 1. **Handler**:...
Handler对象是实现异步消息处理的关键组件,它允许开发者在后台线程执行任务并在主线程中安全地更新UI。然而,不当使用Handler,尤其是结合匿名内部类或非静态内部类,可能导致内存泄漏和Native内存增加,这对应用...
本资料“应用源码之HandlerMessage3.zip”聚焦于这一主题,提供了相关的源码分析,便于深入理解这一机制。 `Handler`是Android中的一个关键类,它允许开发者在不同的线程之间发送和处理消息。通常,在主线程(UI...
在Android应用开发中,HandlerMessage2.zip这个压缩包文件很可能包含了一个关于Android应用程序中的消息处理系统实例——Handler、Message及Looper的源代码示例。在这个示例中,开发者可能通过创建自定义Handler类来...
`Handler`的工作原理是,通过`post()`或`sendMessage()`方法发送一个`Message`对象到消息队列,然后由`Looper`负责取出并分发这个消息,进而更新UI。 `Looper`(循环器)是一个消息循环,它负责不断检查消息队列...
【Android异步消息处理机制】深入理解Looper、Handler、Message三者关系 在Android系统中,异步消息处理机制是...理解并熟练掌握Looper、Handler和Message三者的关系对于编写高性能、线程安全的Android应用至关重要。
- **消息发送**:应用程序通过Handler对象发送消息,消息被添加到与Handler关联的MessageQueue中。 - **消息排队**:新发送的消息按照时间顺序排队等待处理。 - **消息获取**:Looper不断从MessageQueue中取出消息,...