`

Handler 的应用

 
阅读更多

1. Handler 有原理队列

 

 2. main.xml 文件

 

 

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >

    <Button 
        android:id="@+id/button_1"
        android:text="first"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        />
    <Button 
        android:id="@+id/button_2"
        android:text="stop"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        />

</LinearLayout>

 

 

2. 代码实现

 

package com.android.handler.activity;

import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;

/**
 * 
 * @author liuqing
 * @version 1.0
 * @see Handler 的使用
 *
 */
public class Android_chapter14handlerActivity extends Activity {
    
	//开始按扭
	private Button button_1;
	//停止按扭
	private Button button_2;
	//消息队列
	private Handler handler = new Handler();
	
	Runnable postRunnable = new Runnable(){

		@Override
		public void run() {
			System.out.println(" enter successfully...");
			handler.postDelayed(postRunnable, 3000);
		}
	};
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        this.button_1 = (Button) this.findViewById(R.id.button_1);
        this.button_2 = (Button)this.findViewById(R.id.button_2);
        this.button_1.setOnClickListener(new ButtonFirstListener());
        this.button_2.setOnClickListener(new ButtonSecondListener());
    }
    
    private class ButtonFirstListener implements OnClickListener {

		@Override
		public void onClick(View v) {
			handler.post(postRunnable);
			
		}
    	
    }
    
    private class ButtonSecondListener implements OnClickListener {

		@Override
		public void onClick(View v) {
			handler.removeCallbacks(postRunnable);
		}
    	
    }
    
}
 

3. 使用Handler 实现进度条

 

 

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >

    <ProgressBar 
        android:id="@+id/progreebar"
        android:layout_width="fill_parent"
        style="@android:style/Widget.ProgressBar.Horizontal"
        android:layout_height="wrap_content"
        />
    <Button 
        android:id="@+id/start"
        android:text="@string/start"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        />

</LinearLayout>
 

 

package com.handler.progreebar.activtiy;

import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.ProgressBar;

/**
 * 
 * @author liuqing
 * @version 1.0
 * @see Handler 的使用
 *
 */
public class Android_chapter14handlerProgreeBarActivity extends Activity {
	
	private ProgressBar progressBar;
	
	private Button start;
	
	private Handler handler = new Handler(){

		@Override
		public void handleMessage(Message msg) {
			progressBar.setProgress(msg.arg1);
			handler.post(runnable);
		}
		
	};
	
	Runnable runnable = new Runnable(){
		
		private int a;
		@Override
		public void run() {
			a += 10;
			//Obtain 获得Message
			Message message = handler.obtainMessage();
			//设置参数
			message.arg1 = a;
			try {
				Thread.sleep(2000);
			} 
			catch (InterruptedException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			//发送消息
			handler.sendMessage(message);
			if (a >= 100) {
				System.out.println("exits !");
				handler.removeCallbacks(runnable);
			}
		}};
	
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        progressBar = (ProgressBar)findViewById(R.id.progreebar);
        progressBar.setVisibility(0);
        this.progressBar.setMax(100);
        this.start = (Button)findViewById(R.id.start);
        start.setOnClickListener(new StartListener());
    }
    
    private class StartListener implements OnClickListener {

		@Override
		public void onClick(View v) {
			//加入到队列中
			handler.post(runnable);
			
		}
    	
    }
    
    
}

运行结果 

 

 

 

  • 大小: 9.8 KB
分享到:
评论

相关推荐

    Handler 消息机制 多线程 应用场景

    Handler消息机制是Android系统中处理多线程通信的核心组件,它在应用程序开发中扮演着重要角色。通过Handler、Looper和Message三者之间的协同工作,开发者可以在主线程与子线程之间进行安全的数据传递和任务调度。 ...

    Android应用程序消息处理机制(Looper、Handler)分析

    Android 应用程序中,消息处理机制是其异步编程的核心组成部分,主要涉及三个关键组件:Handler、Message和Looper。这种机制使得应用可以有效地管理线程间的通信,避免阻塞主线程,提升用户体验。 首先,我们需要...

    Fragment与Activity使用Handler进行交互

    在Android应用开发中,Fragment和...正确理解和使用Handler能帮助开发者构建高效、稳定的Android应用程序。在实际开发中,还应结合其他通信方式,如Interface回调、EventBus、LiveData等,根据场景选择最适合的方法。

    handler的简单示例

    在这个“handler的简单示例”中,我们将深入探讨Handler的工作原理及其在异步更新UI中的应用。 首先,Handler的核心概念是消息队列和Looper。在Android系统中,每个线程都有一个Looper对象,它负责循环读取并分发...

    handler用法

    本篇文章将详细讲解Handler的基本概念、工作原理以及如何在实际项目中应用。 首先,Handler的核心作用是在不同的线程间传递消息(Message)并执行相应的回调方法。在Android中,大部分UI操作必须在主线程(也称为UI...

    android 中Handler 的几种写法

    通过理解以上知识点,开发者可以灵活地在Android应用中使用`Handler`进行线程间通信,高效地处理异步任务和UI更新。在实际开发中,结合`Handler`、`Looper`、`Thread`以及`Runnable`,可以构建出复杂而稳定的多线程...

    Android 中级应用 handler 之二 初试handler

    本文将深入探讨`Handler`的工作原理及其在实际应用中的使用,旨在帮助开发者提升对Android中级应用的理解。 首先,理解`Handler`的核心概念是必要的。`Handler`、`Message`和`Looper`共同构成了Android的消息处理...

    jobHandler调度器

    "JobHandler调度器"是一种广泛应用于分布式任务调度的框架,主要设计用于处理大规模并发和定时任务的场景。在这个系统中,JobHandler是核心组件,它负责执行具体的业务逻辑。下面我们将详细探讨JobHandler调度器的...

    Android应用源码之HandlerMessage2_应用.zip

    本压缩包"Android应用源码之HandlerMessage2_应用.zip"包含了关于如何在Android应用中使用Handler和Message来处理异步任务和更新UI的示例源代码。下面我们将深入探讨这两个核心组件以及它们在Android中的工作原理。 ...

    Handlerjava代码实现

    在Android开发中,`Handler`是一个非常重要的组件,它用于处理UI线程之外的异步消息,实现线程间通信。...记住,合理利用`Handler`可以有效避免ANR(Application Not Responding)错误,提升应用的稳定性和性能。

    Handler 推荐用法 demo

    本`Handler`推荐用法的示例,旨在帮助开发者理解和掌握如何有效地使用`Handler`来管理应用程序的异步任务和更新UI。 `Handler`的基本原理是基于消息队列(Message Queue)和Looper的机制。它由三部分组成:`Handler...

    Android中的Handler与多线程应用实例

    本文首先解释一下handler是用来干嘛的,然后通过例子介绍其在多线程中的应用。 什么是Handler handler通俗一点讲就是用来在各个进程之间发送数据的...handler应用多线程例子 我们这个例子是实现一个简单的词典功能。

    安卓handler的使用

    在Android应用开发中,Handler是一种重要的线程通信机制,它与Looper、Message紧密配合,用于在不同的线程间传递消息,解决多线程同步问题。本篇将详细讲解Handler的使用,包括如何创建Handler对象、如何发送和处理...

    一个activity中多个handler和消息的处理过程

    在Android应用开发中,Activity是用户界面的主要载体,而Handler机制则是实现异步通信和更新UI的关键工具。本文将深入探讨在一个Activity中如何管理和处理多个Handler以及它们的消息流程。 首先,Handler是Android...

    Foxit PDF Preview Handler

    在实际应用中,用户可能会遇到的问题和解决方案可能包括: - 如果预览不正常,检查Foxit PDF Preview Handler是否已经正确安装,并确保Outlook有权限访问该插件。 - 如果出现渲染问题,可能需要更新到最新版本的...

    express-error-handler:用于Express和Restify应用程序的优雅错误处理程序

    errorHandler = require ( '../error-handler.js' ) , app = express ( ) , env = process . env , port = env . myapp_port || 3000 , http = require ( 'http' ) , server ; // Route that triggers a ...

    Android_Handler详解(一)

    总结起来,Handler是Android中进行线程间通信的重要工具,合理使用它可以有效地提升应用的性能和用户体验。在实际开发中,应结合使用Handler、Looper和Thread,以实现高效的多线程编程。在后续章节,我们将更深入地...

    handler异步更新

    本文将深入解析Handler的工作原理、使用方法及其异步更新的应用场景。 首先,我们来理解一下Android中的线程模型。主线程(UI线程)负责处理用户界面的所有操作,如触摸事件、布局绘制等。而在执行耗时操作时,如果...

    android handler 机制 源码

    理解Handler、Looper和Message的源码对于开发高效、稳定的Android应用至关重要。通过深入学习这些核心组件,开发者能够更好地处理多线程间的通信,避免ANR,提高应用程序的响应速度和用户体验。在实际编程中,可以...

Global site tag (gtag.js) - Google Analytics