Android应用开发基础篇(5)-----Handler与多线程
链接地址:http://www.cnblogs.com/lknlfy/archive/2012/02/19/2358155.html
一、概述
Handler这个类主要用来发送和处理消息的。它有多个发送消息函数,但只有一个处理消息函数handleMessage()。
二、要求
程序中有两个线程,一个是UI线程,一个是自己创建的线程,在自己创建的线程中发送消息,在UI线程中接收并处理这个消息。
三、实现
不仅是Android,很多其他界面编程都是不允许在其他线程中直接更新UI界面的。因此可以在其他线程中向UI线程发送一些需要更新界面的消息,让UI线程来更新界面。
新建工程MyHandler,修改/res/layout/main.xml布局文件,在里面添加2个Button按钮,1个空的View(主要是作排版用的)和1个文本TextView。完整的main.xml文件如下:

1 <?xml version="1.0" encoding="utf-8"?>
2 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
3 android:layout_width="fill_parent"
4 android:layout_height="fill_parent"
5 android:orientation="vertical" >
6
7 <Button
8 android:id="@+id/mbutton"
9 android:layout_width="fill_parent"
10 android:layout_height="wrap_content"
11 android:text="启动线程"
12 android:textSize="15px"
13 />
14
15 <Button
16 android:id="@+id/sbutton"
17 android:layout_width="fill_parent"
18 android:layout_height="wrap_content"
19 android:text="停止线程"
20 android:textSize="15px"
21 />
22
23 <View
24 android:layout_width="fill_parent"
25 android:layout_height="70px"
26 />
27
28 <TextView
29 android:id="@+id/mtextview"
30 android:layout_width="fill_parent"
31 android:layout_height="wrap_content"
32 android:text=" "
33 android:textColor="#FF0000"
34 android:textSize="50px"
35 android:gravity="center_horizontal"
36 />
37
38 </LinearLayout>

接着修改MyHandlerActivity.java文件,该文件中定义了2个类,1个是mHandler类,继承自Handler类,实现了handleMessage (Message msg)函数。另一个是mThread类,继承自Thread类,实现了run()函数。其他那些在程序中都有详细注释,完整的MyHandlerActivity.java文件如下:

1 package com.nan.handler;
2
3 import android.app.Activity;
4 import android.os.Bundle;
5 import android.os.Handler;
6 import android.os.Message;
7 import android.view.View;
8 import android.widget.Button;
9 import android.widget.TextView;
10
11 public class MyHandlerActivity extends Activity
12 {
13 //线程是否停止标志位
14 private boolean STOP = true;
15 //线程已经启动了几秒
16 private int second = 0;
17
18 private mHandler handler;
19 private mThread thread;
20 private Button mButton;
21 private Button sButton;
22 private TextView mTextView;
23
24 /** Called when the activity is first created. */
25 @Override
26 public void onCreate(Bundle savedInstanceState)
27 {
28 super.onCreate(savedInstanceState);
29 setContentView(R.layout.main);
30
31 handler = new mHandler();
32 thread = new mThread();
33
34 mTextView = (TextView)findViewById(R.id.mtextview);
35 mButton = (Button)findViewById(R.id.mbutton);
36 //设置“启动线程”按钮事件处理
37 mButton.setOnClickListener(new View.OnClickListener()
38 {
39
40 @Override
41 public void onClick(View v)
42 {
43 // TODO Auto-generated method stub
44 //设置标志位
45 STOP = false;
46 //开启新的线程
47 thread.start();
48
49 }
50 });
51 sButton = (Button)findViewById(R.id.sbutton);
52 //设置“停止线程”按钮事件处理
53 sButton.setOnClickListener(new View.OnClickListener()
54 {
55
56 @Override
57 public void onClick(View v)
58 {
59 // TODO Auto-generated method stub
60 //设置标志位
61 STOP = true;
62 }
63 });
64
65 }
66
67 //自己定义的Handler类
68 private class mHandler extends Handler
69 {
70 @Override
71 public void handleMessage (Message msg)
72 {
73 switch(msg.what)
74 {
75 case 1:
76 {
77 //秒数增加
78 second ++;
79 //显示是第几秒
80 mTextView.setText(Integer.toString(second));
81 break;
82 }
83 }
84 }
85 }
86
87 //自己定义的Thread类
88 private class mThread extends Thread
89 {
90
91 @Override
92 //线程启动时执行这个函数
93 public void run()
94 {
95 //一直循环,直到标志位为“真”
96 while(!STOP)
97 {
98 try {
99 //延时1秒
100 Thread.sleep(1000);
101 } catch (InterruptedException e) {
102 // TODO Auto-generated catch block
103 e.printStackTrace();
104 }
105 Message msg = new Message();
106 //消息标志
107 msg.what = 1;
108 //发送这个消息
109 handler.sendMessage(msg);
110 }
111 }
112 }
113
114 }

好了,运行该程序。
点击一下“开启线程”按钮,如下:
再点击一下“停止线程”按钮,发现计数停止了,说明新开启的线程已经退出了。
完成。
Android应用开发基础篇(5)-----Handler与多线程的更多相关文章
- Android应用开发基础篇(1)-----Button
Android应用开发基础篇(1)-----Button 一.概述 Button,顾名思义就是按钮的意思,它主要的功能是响应用户按下按钮时的动作. 二.应用 新建一个工程, ...
- Android应用开发基础篇(3)-----ListView
一.概述 ListView是一个列表显示控件,它的应用非常广泛,在很多应用程序中都可以看到它的身影,比如来电通,网易新闻等等,特别是QQ.因此非常有必要熟练掌握它. 二.要求 能够利用ListView ...
- Android应用开发基础篇(4)-----TabHost(选项卡)
一.概述 TabHost是一种用来显示标签的组件,不清楚?看一下来电通这个应用就知道了.这个组件用起来与其他组件不太一样,它需要继承TabActivity这个类,还有它的布局文件与我们平时用的也有些不 ...
- Android应用开发基础篇(12)-----Socket通信
链接地址:http://www.cnblogs.com/lknlfy/archive/2012/03/03/2378669.html 一.概述 网络通信无论在手机还是其他设备上都应用得非常广泛,因此掌 ...
- Android应用开发基础篇(12)-----Socket通信(转载)
转自:http://www.devdiv.com/android_socket_-blog-258060-10594.html 一.概述 网络通信无论在手机还是其他设备上都应用得非常广泛,因此掌握网络 ...
- Android应用开发基础篇(14)-----自定义标题栏
一.概述 每一个应用程序默认的标题栏(注意与状态栏的区别)只有一行文字(新建工程时的名字),而且颜色.大小等都是固定的,给人的感觉比较单调.但当程序需要美化的时候,那么修改标题栏是就是其中一项内容,虽 ...
- Android应用开发基础篇(6)-----Service
链接地址:http://www.cnblogs.com/lknlfy/archive/2012/02/20/2360336.html 一.概述 我们知道,Service是Android的四大组件之一. ...
- Android应用开发基础篇(2)-----Notification(状态栏通知)
一.概述 Notification这个部件的功能是在状态栏里显示消息提醒,比如有未读的短信或者是未接的电话,那么状态栏里都会有显示,更或者是从某个应用(比如QQ,酷我音乐等等)里按Home键 ...
- Android应用开发基础篇(16)-----ScaleGestureDetector(缩放手势检测)
链接地址:http://www.cnblogs.com/lknlfy/archive/2012/03/11/2390274.html 一.概述 ScaleGestureDetector这个类是专门用来 ...
随机推荐
- Android 学习之 开源项目PullToRefresh的使用
首先 下载 Android-PullToRefresh-master 下载地址 https://github.com/chrisbanes/Android-PullToRefresh 下载之后将其解 ...
- 读配置文件 properties
/** * */package com.sprucetec.tms.fee.utils;import java.io.IOException;import java.util.ArrayList;im ...
- 二道shell面试题
1.按照给出的运行结果,编写一个名为xunhuan 的shell过程(用循环语句). 0 10 210 3210 43210 543210 6543210 76543210 876543210 2.编 ...
- 2016 Multi-University Training Contest 2 总结
第二次多校,出师未捷身先死 欣君看了一下09题,高呼水题,迅速码好,一A. 我看了11题,发现分奇偶讨论即可,于是按思路写好,一A. 欣君搞鼓出01题的一个公式,于是我照着写,一WA.简直不可思议,发 ...
- Objective C 链式调用
起因 某日使用DKChainableAnimationKit的时候发现可以如下写代码: view.animation.rotate(180).anchorTopLeft.thenAfter(1.0). ...
- md笔记——使用 @font-face 引入你喜欢的字体
使用 @font-face 引入你喜欢的字体 原理 CSS3的自定义字体@font-face 规则的工作原理 使用@font-face规则初看起来非常简单.从本质上看,它只需要两个步骤. 首先,使用 ...
- JavaScript引用类型之Array数组之强大的splice()方法
splice()方法可以说是Array数组最强大的方法,他的用法很多,主要用法是向数组的中部插入项! 下面是它的用法: arrayObject.splice(index,howmany,element ...
- C#后台创建控件并获取值
前台代码 <form id="form1" runat="server"> <div> <div class="item ...
- Excel文件转换为html静态网页
Excel文件转换为html静态网页:右键另存为:
- HelloWorld——Cocos2d-x学习历程(二)
HelloWorld分析: 1."resource"文件夹 该文件夹主要用于存放游戏中需要的图片.音频和配置等资源文件. 2."include"和"s ...