- 浏览: 67523 次
- 性别:
- 来自: Mercury
最新评论
一、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); } } }; }
运行结果:
发表评论
文章已被作者锁定,不允许评论。
-
Android40_Dialog
2011-11-14 00:11 2994Dialog是Android常用的对话框控件。AlertDia ... -
Android39_Clock和TimePicker
2011-11-14 00:08 2358一、AnalogClock和DigitalClock ... -
Android38_ImageView和Gallery
2011-11-14 00:07 3610一、ImageView使用方法 ImageVi ... -
Android37_JSON数据解析
2011-11-08 00:14 2346一、JSON介绍 JSON(JavaSc ... -
Android36_Animations使用(四)
2011-11-08 00:14 3417一、LayoutAnimationsContrlller ... -
Android35_Animations使用(三)
2011-11-08 00:13 2650一、AnimationSet的具体使用方法 ... -
Android34_Animations使用(二)
2011-11-08 00:12 1955在代码中使用Animations可以很方便的调试、运行 ... -
Android33_Animations使用(一)
2011-11-08 00:12 2283一、Animations介绍 Anima ... -
Android31_AppWidget使用(二)
2011-11-05 00:09 2505一、PendingIntent介绍 PendingIn ... -
Android30_AppWidget使用(一)
2011-11-05 00:08 2260一、App Widget定义 App ... -
Android32_Notification用法
2011-11-05 00:09 1885Android系统的状态栏(Status Bar)中有一 ... -
Android29_SeekBar和RatingBar
2011-11-02 23:21 2117一、使用SeekBar步骤: SeekB ... -
Android28_ExpandableListActivity
2011-11-02 23:21 1485ExpandableListActivity就是可扩展的 ... -
Android27_AutoCompleteTextView
2011-11-02 23:21 1088一、创建AutoCompleteTextView ... -
Android26_DatePicker
2011-11-02 23:20 1778一、DatePicker和DatePickerDialo ... -
Android25_Spinner使用方法
2011-11-02 23:20 2813一、创建Spinner的步骤 1.在布局 ... -
Android24_Service初步
2011-10-18 22:27 1006一、Service概念 ... -
Android23_Socket编程
2011-10-18 22:19 1506一、什么是Socket Socket是基 ... -
Android22_WIFI网络操作
2011-10-18 22:12 1691一、什么是WIFI WIFI就是一种无线 ... -
Android21_广播机制(二)
2011-10-18 22:00 1003一、注册BroadcastReceiver的方法 ...
相关推荐
本篇将深入探讨Handler的基本概念、使用方法以及其在多线程环境中的作用。 1. Handler是什么? Handler,中文可译为“处理器”,在Android系统中主要负责处理来自其他线程的消息。它通过发送和处理Message对象,...
Handler是Android中的一个关键类,它允许开发者在不同的线程之间发送和处理消息。通常,主线程负责更新UI,而其他工作线程则执行耗时操作。Handler就是连接这两者的桥梁,通过发送Message对象到消息队列,由Looper...
在Android系统中,Handler、Message和Looper构成了一个关键的异步通信机制,即Handler消息处理机制。这个机制允许Android应用程序在不同的线程间传递消息,处理UI更新等操作,是多线程编程中的重要组成部分。下面...
总结来说,"Thread_Handler_MessageDownload"项目通过实践展示了如何在Android中使用Thread进行后台操作,利用Handler和Message在工作线程与主线程之间进行高效、安全的通信,实现网络图片的异步加载。这种方法对于...
在上一篇文章《Android应用程序消息处理机制(Looper、Handler)分析》中,我们分析了Android应用程序的消息处理机制,本文将结合这种消息处理机制来详细分析Android应用程序是如何获得键盘按键消息的。
Android的Handler使用方法总结,不错的文档,跟大家分享分享
【Android_Handler01-源码】是一个关于Android Handler机制的源码分析项目。在Android开发中,Handler、Looper和Message是实现线程间通信的重要组件,尤其在UI更新和异步任务处理上扮演着核心角色。这个源码库可能是...
在Android应用开发中,HandlerMessage1_HandlerMessage是一个关键的主题,涉及到Android系统中的消息处理机制,尤其是Handler、Message和Looper的使用。这些组件是Android异步编程的重要组成部分,用于解决UI线程与...
本文将深入探讨Android中的Handler机制及其使用方法。 首先,理解Handler的基本概念。Handler是Android消息处理系统的一部分,它与Looper和Message紧密协作,用于在不同线程之间传递消息和执行任务。通常,主线程...
Handler在android里负责发送和处理消息。它的主要用途有(或者是干什么的): 1)执行计划任务,按计划(定时)发送消息或执行某个Runnanble(使用POST方法); 2)线程间通信,把从其他线程中发送来的消息放入消息...
这是因为TimerTask在后台线程中执行,每隔5秒发送一个消息到主线程的Handler,Handler接收到消息后调用`updateTitle()`方法。 除了`sendMessage()`,Handler还提供了`post()`方法,用于发送Runnable对象。这种方式...
通过调用`Handler`的`post()`或`sendMessage()`方法,开发者可以将一个`Runnable`对象或`Message`对象发送到消息队列中。`Handler`的`handleMessage()`方法是子类必须重写的方法,用于处理由消息队列分发过来的消息...
Android 中 Handler 的使用方法和总结 Handler 是 Android 中的一种非常重要的组件,它起到了十分重要的作用。Handler 主要用于异步消息的处理,当发出一个消息之后,首先进入一个消息队列,发送消息的函数即刻返回...
这个资源主要有三个Demo文件 是用来展示Handler的异步处理消息的 第一个Demo展示了如何启动线程和暂停线程 第二个Demo采用了Handler的消息队列机制 第三个Demo用HandlerThread的looper来构造一个handler,然后该...
本教程将介绍如何使用Android Studio和Handler组件来创建一个简单的计时器应用。Handler是Android中的一个关键组件,它允许开发者在不同的线程之间发送和处理消息,从而实现异步操作。 首先,我们需要了解Android ...
本示例中的“android demo”就是关于如何利用Handler的`postDelayed`方法和`Runnable`接口来实现一个延时3秒的Splash Screen。下面将详细解释这个过程以及涉及的技术点。 1. **Handler**: Handler是Android中处理...
【Android Handler 使用详解】 Handler 是 Android 平台中用于处理线程间通信的关键组件,尤其在涉及 UI(用户界面)更新时,它扮演着至关重要的角色。在 Android 应用程序启动时,系统会默认创建一个主线程,也...
总结来说,Handler是Android中处理多线程和UI同步的核心工具,理解其工作原理和使用方法对于开发高效、稳定的Android应用至关重要。通过熟练掌握Handler,开发者可以更好地控制应用的执行流程,确保UI响应性和性能。...
Android 多线程Handler/Message机制详解 Android 多线程机制是 Android 应用程序中最重要的组件之一,它允许应用程序在后台执行一些操作,而不影响用户的交互体验。在 Android 中,多线程机制是基于 Handler 和 ...