Anroid开发之Handler的使用方法

如果在需要在Activity中一个耗时的操作,例如当我们需要联网读取数据, 或者读取本地较大的一个文件的时候,不能把这些操作放在主线程中。因为如果 放在主线程中的话,界面会出现假死现象, 如果5秒钟还没有完成的话,会收到 Android系统的一个错误提示 "强制关闭"。这个时候我们需要把这些 耗时的操作,放在一个子线程中,因为子线程涉及到UI更新,Android主线程是 线程不安全的,也就是说,更新UI只能在主线程中更新,子线程中操作是危险的 。这个时候,Handler就出现了,来解决这个复杂的问题。Handler主要接受子线 程发送的数据, 并用此数据配合主线程更新UI。 ,由于Handler运行在主线程中 (UI线程中),它与子线程可以通过Message对象来传递数据,这个时候,Handler 就承担着接受子线程传过来的(子线程用sedMessage()方法传递)Message对象(里 面包含数据),把这些消息放入主线程队列中,配合主线程进行更新UI。Handler 就是运行在Activity中的不可见的控件,它包括一个可以容纳主线程的子线程的 队列容器以及一个子线程和主线程通信的Message消息队列容器。Handler可以把 线程对象装入线程队列,也可以从线程队列中取出线程执行。

Handler的基本使用方法:

post(Runnable) 将线程对象添加到队列中

postAtTime(Runnable,long) 在指定的时间( uptimeMillis )执行 Runnable 对象

postDelayed(Runnable,long) 在指定的时间间隔( delayMillis )后执行 Runnable 对象

Handler使用的一般步骤为:

1. 首先在Activity中声明一个Handler对象。

2. 定义一个或多个线程对象,复写线程对象的run()方法,在run()方法中写 上想要执行的操作。

3. 用Handler的post()(post()有多种重载形式)方法线程对象装入handler 的线程队列。系统会在适当的时候取出当前线程队列中的队首线程并执行。

4. 当需要停止线程队列中某个线程的执行时,可以在主线程中调用 removeCallbacks()方法,删除队列中未执行的线程对象。

示例:新建一个Android应用程序项目,main.xml总添加两个Button按钮。程 序的流程为当我们点击Activity中的start按钮时,Activity中的Handler对象会 将一个线程对象updateThread装入线程队列,在这个线程中会在控制台输出 “updateThread”,并且将本线程再次装入handler的线程队列,形成循环调用 。这样就可以不断输出文字内容。当我们单击end按钮时调用removeCallbacks() 方法,删除线程对象,停止线程的执行,不再输出文字内容。

main.xml

01.<?xml version="1.0" encoding="utf-8"? >
02.<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"03. android:orientation="vertical"
04. android:layout_width="fill_parent"
05. android:layout_height="fill_parent"
06. >
07.<TextView
08. android:layout_width="fill_parent"
09. android:layout_height="wrap_content"
10. android:text="@string/hello"
11. />
12.<Button
13. android:id="@+id/startButton"
14. android:layout_width="300dp"
15. android:layout_height="wrap_content"
16. android:text="start"
17. />
18.<Button
19. android:id="@+id/endButton"
20. android:layout_width="300dp"
21. android:layout_height="wrap_content"
22. android:text="end"
23. />
24.</LinearLayout>

时间: 2024-10-29 03:13:15

Anroid开发之Handler的使用方法的相关文章

Android开发之Handler使用4个例子

Handler使用例1这个例子是最简单的介绍handler使用的,是将handler绑定到它所建立的线程中. 本次实验完成的功能是:单击Start按钮,程序会开始启动线程,并且线程程序完成后延时1s会继续启动该线程,每次线程的run函数中完成对界面输出nUpdateThread...文字,不停的运行下去,当单击End按钮时,该线程就会停止,如果继续单击Start,则文字又开始输出了. 软件界面如下: 实验主要部分代码和注释: MainActivity.java: 复制代码代码如下: packag

Android开发之SQLite的使用方法_Android

前言 SQLite是一种轻量级的小型数据库,虽然比较小,但是功能相对比较完善,一些常见的数据库基本功能也具有,在现在的嵌入式系统中使用该数据库的比较多,因为它占用系统资源很少.Android系统中也不例外,也是采用SQLite,本节中就学习下在andorid中怎样使用该数据库来存放数据,并且对SQLite完成简单的新建,更新,查询,删除等操作. 实验说明: Android中使用SQLite数据库时,需要用adb来辅助调试,如果想在windows下的cmd命令行中使用adb,必须先配置环境变量,我

Android开发之MediaPlayer基本使用方法详解

本文实例讲述了Android MediaPlayer基本使用方法.分享给大家供大家参考,具体如下: 使用MediaPlayer播放音频或者视频的最简单例子: Java代码部分: public class MediaPlayerStudy extends Activity { private Button bplay,bpause,bstop; private MediaPlayer mp = new MediaPlayer(); @Override public void onCreate(Bu

Android开发之SQLite的使用方法

前言 SQLite是一种轻量级的小型数据库,虽然比较小,但是功能相对比较完善,一些常见的数据库基本功能也具有,在现在的嵌入式系统中使用该数据库的比较多,因为它占用系统资源很少.Android系统中也不例外,也是采用SQLite,本节中就学习下在andorid中怎样使用该数据库来存放数据,并且对SQLite完成简单的新建,更新,查询,删除等操作. 实验说明: Android中使用SQLite数据库时,需要用adb来辅助调试,如果想在windows下的cmd命令行中使用adb,必须先配置环境变量,我

Android开发之ContentProvider的使用详解_Android

前言         Content Provider为存储数据和获取数据提供了统一的接口,它可以完成在不同应用程序下的数据共享,而在上一篇文章Android开发之SQLite的使用方法讲到的SQLite只能在同一个程序中共享数据.另外android为一些常见的数据,比如说音频,视频,图片,通讯录等提供了Content Provider,这样我们就可以很方便的对这些类型的数据操作了.使用ContentProvider的好处是开发人员不需要考虑数据内部是怎么存储的,比如说如果我们想利用Conten

Android开发之ContentProvider的使用详解

前言 Content Provider为存储数据和获取数据提供了统一的接口,它可以完成在不同应用程序下的数据共享,而在上一篇文章Android开发之SQLite的使用方法讲到的SQLite只能在同一个程序中共享数据.另外android为一些常见的数据,比如说音频,视频,图片,通讯录等提供了Content Provider,这样我们就可以很方便的对这些类型的数据操作了.使用ContentProvider的好处是开发人员不需要考虑数据内部是怎么存储的,比如说如果我们想利用ContenProvider

Android编程开发之seekBar采用handler消息处理操作的方法_Android

本文实例讲述了Android编程开发之seekBar采用handler消息处理操作的方法.分享给大家供大家参考,具体如下: 该案例简单实现进度条可走,可拖拽的功能,下面请看源码: 布局文件: <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout

Android编程开发之seekBar采用handler消息处理操作的方法

本文实例讲述了Android编程开发之seekBar采用handler消息处理操作的方法.分享给大家供大家参考,具体如下: 该案例简单实现进度条可走,可拖拽的功能,下面请看源码: 布局文件: <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout

Android开发之ListView列表刷新和加载更多实现方法_Android

本文实例讲述了Android开发之ListView列表刷新和加载更多实现方法.分享给大家供大家参考.具体如下: 上下拉实现刷新和加载更多的ListView,如下: package com.sin.android.ui; import android.content.Context; import android.util.AttributeSet; import android.view.Gravity; import android.view.MotionEvent; import andro