`
Bauble
  • 浏览: 67717 次
  • 性别: Icon_minigender_1
  • 来自: Mercury
社区版块
存档分类
最新评论

Android13_Handler使用方法(一)

阅读更多

一、Handler的基本概念

在手机开发的过程中有很多功能是不能放在Activity的正常操作中,费时,用户体验差,一般都将下载功能、数据处理等都放在一个单独的线程中处理。

 

Handler在android里负责发送和处理消息。它的主要用途有:

   1)按计划发送消息或执行某个Runnanble(使用POST方法);

   2)从其他线程中发送来的消息放入消息队列中,避免线程冲突(常见于更新UI线程)

 

二、Handler基本使用方法

main.xml

 

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    >
<Button
	android:id="@+id/startButton"
	android:layout_width="fill_parent"
	android:layout_height="wrap_content"
	android:text="开始"
	/>
<Button
	android:id="@+id/endButton"
	android:layout_width="fill_parent"
	android:layout_height="wrap_content"
	android:text="jies"/>
</LinearLayout>

  HandlerActivity.java

 

package com.android.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;

public class HandlerActivity extends Activity {
	//声明两个按钮控件
	private Button startButton = null;
	private Button endButton = null;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        //根据控件的ID得到代表控件的对象,并未这两个按钮设置相应的监听器
        startButton = (Button)findViewById(R.id.startButton);
        startButton.setOnClickListener(new StartButtonListener());
        endButton = (Button)findViewById(R.id.endButton);
        endButton.setOnClickListener(new EndButtonListener());
        
    }
    
    //1.创建一个Handler对象
    Handler handler  = new Handler();
    //3.要执行的操作写在线程对象的run方法当中
    Runnable updateThread =  new Runnable(){
		public void run() {
			System.out.println("执行了操作。。。");
			//在run方法内部,执行postDelayed或者是post方法,将updateTread这个线程加入到消息队列当中/3000ms
			handler.postDelayed(updateThread, 3000);
		}
    	
    };
    
    class StartButtonListener implements OnClickListener{
		public void onClick(View v) {
			//2.调用Handler的post方法,将要执行的线程对象添加到队列当中,没有延时
			handler.post(updateThread);
		}
    }
    
    class EndButtonListener implements OnClickListener{
		public void onClick(View v) {
			handler.removeCallbacks(updateThread);
		}
    }
    
   
}

 运行结果:


     
 输出情况:


三、使用Handler更新ProgressBar

 

main.xml

 

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

<ProgressBar
	android:id="@+id/bar"
	style="?android:attr/progressBarStyleHorizontal"
	android:layout_width="200dp"
	android:layout_height="wrap_content"
	android:visibility="gone"
	/>
<Button 
	android:id="@+id/startButton"
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:text="start"/>
</LinearLayout>

 HandlerProgressBar.java

 

package com.android.activity;

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;

public class HandlerProgressBarActivity extends Activity {
	//声明控件变量
	ProgressBar bar = null;
	Button startButton = null;
	
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        //根据控件的ID得到代表控件的对象,并为按钮设置监听器
        bar = (ProgressBar)findViewById(R.id.bar);
        startButton = (Button)findViewById(R.id.startButton);
        startButton.setOnClickListener(new ButtonListener());
    }
    
    //当点击startButton按钮时,就会执行ButtonListener的onClick方法
    class ButtonListener implements OnClickListener{
		public void onClick(View v) {
			bar.setVisibility(View.VISIBLE);
			//1.将线程添加到“线程”的消息队列中,并第一次执行updateThread这个线程
			updateBarHandler.post(updateThread);
		}
    	
    }
    //使用匿名内部类来重写Handler当中的handleMessage方法
    Handler updateBarHandler = new Handler(){
		@Override
		public void handleMessage(Message msg) {
			bar.setProgress(msg.arg1);
			//3.将线程添加到“线程”的消息队列中
			updateBarHandler.post(updateThread);
		}
    	
    };
    //2.线程类,该类使用匿名内部类的方式进行声明
    Runnable updateThread = new Runnable(){
    	int i = 0 ;
		public void run() {
			System.out.println("Begin Thread");
			i = i + 10 ;
			//得到一个消息对象,Message类是有Android操作系统提供
			Message msg = updateBarHandler.obtainMessage();
			//将msg对象的arg1参数的值设置为i,用arg1和arg2这两个成员变量传递消息,优点是系统性能消耗较少
			msg.arg1 = i ;
			try {
				//设置当前显示睡眠1秒
				Thread.sleep(1000);
			} catch (InterruptedException e) {
				e.printStackTrace();
			}
			//将msg对象加入到“消息”的消息队列当中,可以被handleMessage接收到
			updateBarHandler.sendMessage(msg);
			if( i == 100){
				//如果当i的值为100时,就将线程对象从handler当中移除
				updateBarHandler.removeCallbacks(updateThread);
			}
		}
    };
}

 运行结果:


       

 

  • 大小: 20.2 KB
  • 大小: 17.6 KB
  • 大小: 20.2 KB
分享到:
评论
发表评论

文章已被作者锁定,不允许评论。

相关推荐

    Android_Handler详解(一)

    本篇将深入探讨Handler的基本概念、使用方法以及其在多线程环境中的作用。 1. Handler是什么? Handler,中文可译为“处理器”,在Android系统中主要负责处理来自其他线程的消息。它通过发送和处理Message对象,...

    Android_Handler的线程队列Demo

    Handler是Android中的一个关键类,它允许开发者在不同的线程之间发送和处理消息。通常,主线程负责更新UI,而其他工作线程则执行耗时操作。Handler就是连接这两者的桥梁,通过发送Message对象到消息队列,由Looper...

    Android_Handler消息处理机制

    在Android系统中,Handler、Message和Looper构成了一个关键的异步通信机制,即Handler消息处理机制。这个机制允许Android应用程序在不同的线程间传递消息,处理UI更新等操作,是多线程编程中的重要组成部分。下面...

    Thread_Handler_MessageDownload.zip

    总结来说,"Thread_Handler_MessageDownload"项目通过实践展示了如何在Android中使用Thread进行后台操作,利用Handler和Message在工作线程与主线程之间进行高效、安全的通信,实现网络图片的异步加载。这种方法对于...

    Android-Event-driver.zip_Looper_android_android Handler_event

    在上一篇文章《Android应用程序消息处理机制(Looper、Handler)分析》中,我们分析了Android应用程序的消息处理机制,本文将结合这种消息处理机制来详细分析Android应用程序是如何获得键盘按键消息的。

    Android的Handler使用方法总结

    Android的Handler使用方法总结,不错的文档,跟大家分享分享

    Android_Handler01-源码.rar

    【Android_Handler01-源码】是一个关于Android Handler机制的源码分析项目。在Android开发中,Handler、Looper和Message是实现线程间通信的重要组件,尤其在UI更新和异步任务处理上扮演着核心角色。这个源码库可能是...

    Android应用源码之HandlerMessage1_HandlerMessage.zip

    在Android应用开发中,HandlerMessage1_HandlerMessage是一个关键的主题,涉及到Android系统中的消息处理机制,尤其是Handler、Message和Looper的使用。这些组件是Android异步编程的重要组成部分,用于解决UI线程与...

    android中的handler的使用方法

    本文将深入探讨Android中的Handler机制及其使用方法。 首先,理解Handler的基本概念。Handler是Android消息处理系统的一部分,它与Looper和Message紧密协作,用于在不同线程之间传递消息和执行任务。通常,主线程...

    android_handler学习笔记

    Handler在android里负责发送和处理消息。它的主要用途有(或者是干什么的):  1)执行计划任务,按计划(定时)发送消息或执行某个Runnanble(使用POST方法);  2)线程间通信,把从其他线程中发送来的消息放入消息...

    android_Handler整理总结

    这是因为TimerTask在后台线程中执行,每隔5秒发送一个消息到主线程的Handler,Handler接收到消息后调用`updateTitle()`方法。 除了`sendMessage()`,Handler还提供了`post()`方法,用于发送Runnable对象。这种方式...

    Android_Handler,Looper,Message

    通过调用`Handler`的`post()`或`sendMessage()`方法,开发者可以将一个`Runnable`对象或`Message`对象发送到消息队列中。`Handler`的`handleMessage()`方法是子类必须重写的方法,用于处理由消息队列分发过来的消息...

    android中Handler的使用方法和总结

    Android 中 Handler 的使用方法和总结 Handler 是 Android 中的一种非常重要的组件,它起到了十分重要的作用。Handler 主要用于异步消息的处理,当发出一个消息之后,首先进入一个消息队列,发送消息的函数即刻返回...

    Android_Handler

    这个资源主要有三个Demo文件 是用来展示Handler的异步处理消息的 第一个Demo展示了如何启动线程和暂停线程 第二个Demo采用了Handler的消息队列机制 第三个Demo用HandlerThread的looper来构造一个handler,然后该...

    Android Studio通过Handler制作简单的计时器

    本教程将介绍如何使用Android Studio和Handler组件来创建一个简单的计时器应用。Handler是Android中的一个关键组件,它允许开发者在不同的线程之间发送和处理消息,从而实现异步操作。 首先,我们需要了解Android ...

    android demo,使用Handler的postDelay,Runnable run实现延时3秒的splash。

    本示例中的“android demo”就是关于如何利用Handler的`postDelayed`方法和`Runnable`接口来实现一个延时3秒的Splash Screen。下面将详细解释这个过程以及涉及的技术点。 1. **Handler**: Handler是Android中处理...

    android-Handler的使用

    【Android Handler 使用详解】 Handler 是 Android 平台中用于处理线程间通信的关键组件,尤其在涉及 UI(用户界面)更新时,它扮演着至关重要的角色。在 Android 应用程序启动时,系统会默认创建一个主线程,也...

    Android中handler的使用

    总结来说,Handler是Android中处理多线程和UI同步的核心工具,理解其工作原理和使用方法对于开发高效、稳定的Android应用至关重要。通过熟练掌握Handler,开发者可以更好地控制应用的执行流程,确保UI响应性和性能。...

    android多线程handler/message机制详解

    Android 多线程Handler/Message机制详解 Android 多线程机制是 Android 应用程序中最重要的组件之一,它允许应用程序在后台执行一些操作,而不影响用户的交互体验。在 Android 中,多线程机制是基于 Handler 和 ...

Global site tag (gtag.js) - Google Analytics