layout文件:

 <?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="com.hanqi.testapp2.PractiseActivity4"
android:orientation="vertical"> <TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/tvw1"/>
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/tvw2"/> <Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/btt1"
android:text="随机选择"
android:onClick="btn_onClick"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="接受的消息"
android:id="@+id/tv_5"/>
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="发消息"
android:onClick="btn2_onClick"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="10"
android:id="@+id/tv_6"
android:layout_gravity="center"/>
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="增加"
android:onClick="btn3_onClick"
android:id="@+id/bt_3"/>
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="减少"
android:onClick="btn3_onClick"
android:id="@+id/bt_4"/>
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="暂停"
android:onClick="btn3_onClick"
android:id="@+id/bt_5"/>
</LinearLayout>

java类:

 package com.hanqi.testapp2;

 import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Button;
import android.widget.TextView; public class PractiseActivity4 extends AppCompatActivity { TextView tvw1;
Button btt1;
TextView tvw2;
TextView tv_5;
TextView tv_6;
Button bt_3;
Button bt_4;
Button bt_5;
//定义Handler
Handler h = new Handler(){
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
//处理消息
if (msg.what ==1)
{
String m = msg.obj.toString();
tv_5.setText(tv_5.getText()+" "+m);
}
else if (msg.what ==2)
{
tv_5.setText(tv_5.getText()+"空消息");
}
}
}; int i = 10;
Handler hl = new Handler()
{
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
switch (msg.what)
{
case 1:
if (i ==20)
{
return;
}
i++;
tv_6.setText(i + "");
//发送
hl.sendEmptyMessageDelayed(1, 1000);
hl.removeMessages(2);
bt_3.setEnabled(false);
bt_4.setEnabled(true);
bt_5.setEnabled(true);
break;
case 2:
if (i ==0)
{
return;
}
i--;
tv_6.setText(i+"");
hl.sendEmptyMessageDelayed(2, 1000);
hl.removeMessages(1);
bt_3.setEnabled(true);
bt_4.setEnabled(false);
bt_5.setEnabled(true);
break;
case 3:
hl.removeMessages(1);
hl.removeMessages(2);
bt_3.setEnabled(true);
bt_4.setEnabled(true);
bt_5.setEnabled(false);
break;
}
}
}; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_practise4);
tvw1 = (TextView)findViewById(R.id.tvw1);
btt1 = (Button)findViewById(R.id.btt1);
tvw2 = (TextView)findViewById(R.id.tvw2);
tv_5 = (TextView)findViewById(R.id.tv_5);
tv_6 = (TextView)findViewById(R.id.tv_6);
bt_3 = (Button)findViewById(R.id.bt_3);
bt_4 = (Button)findViewById(R.id.bt_4);
bt_5 = (Button)findViewById(R.id.bt_5);
}
//三个按钮
public void btn3_onClick(View v)
{
switch (v.getId())
{
case R.id.bt_3:
//发送增加消息
hl.sendEmptyMessage(1);
break;
case R.id.bt_4:
hl.sendEmptyMessage(2);
break;
case R.id.bt_5:
hl.sendEmptyMessage(3);
break;
}
}
//发消息
public void btn2_onClick(View v)
{
//启动线程
new Thread(){
@Override
public void run() {
//发送消息
//1.创建Message
Message m = Message.obtain();
m.what = 1;//id
m.obj = "新信息";
//2.发送即时消息
h.sendMessage(m);
m = Message.obtain();
m.what = 1;//id
m.obj = "新信息";
//发送延时消息
h.sendMessageDelayed(m,2000);
h.sendEmptyMessage(2);
h.sendEmptyMessageDelayed(2,1000);
}
}.start();
} // String c1 = "北京";
// String c2 = "上海";
// public void btn_onClick(View v)
// {
// //创建子线程1
// new Thread(){
// @Override
// public void run() {
// for (int i=0;i<20;i++)
// {
// if(i%2==0)
// {
// c1="";
// }
// else
// {
// c1="北京";
// }
// runOnUiThread(new Runnable() {
// @Override
// public void run() {
// tvw1.setText(c1);
// }
// });
// //暂停
// try {
// Thread.sleep((int) (Math.random()*1000));
// }
// catch (Exception e)
// {
//
// }
// }
// runOnUiThread(new Runnable() {
// @Override
// public void run() {
// Toast.makeText(PractiseActivity4.this, c1 + "循环完成", Toast.LENGTH_SHORT).show();
// }
// });
// }
// }.start();
// //创建子线程2
// new Thread(){
// @Override
// public void run() {
// for (int i=0;i<20;i++)
// {
// if(i%2==0)
// {
// c2="";
// }
// else
// {
// c2="上海";
// }
// runOnUiThread(new Runnable() {
// @Override
// public void run() {
// tvw2.setText(c2);
// }
// });
// //暂停
// try {
// Thread.sleep((int) (Math.random()*1000));
// }
// catch (Exception e)
// {
//
// }
// }
// runOnUiThread(new Runnable() {
// @Override
// public void run() {
// Toast.makeText(PractiseActivity4.this, c2 + "循环完成", Toast.LENGTH_SHORT).show();
// }
// });
// }
// }.start();
// }
}

效果为:

Android ——Handler相关的更多相关文章

  1. Android Handler leak 分析及解决办法

    In Android, Handler classes should be static or leaks might occur, Messages enqueued on the applicat ...

  2. [Android]Handler的消息机制

    最经面试中,技术面试中有一个是Handler的消息机制,细细想想,我经常用到的Handler无非是在主线程(或者说Activity)新建一个Handler对象,另外一个Thread是异步加载数据,同时 ...

  3. android Handler vs Timer

    Handler vs Timer 在我们Android开发过程中,经常需要执行一些短周期的定时任务,这时候有两个选择Timer或者Handler.然而个人认为: Handler 在多个方面比Timer ...

  4. Android Handler机制彻底梳理

    Android的消息机制其实也就是Handler相关的机制,对于它的使用应该熟之又熟了,而对于它的机制的描述在网上也一大堆[比如15年那会在网上抄了一篇https://www.cnblogs.com/ ...

  5. 4 Handler相关类——Live555源码阅读(一)基本组件类

    这是Live555源码阅读的第一部分,包括了时间类,延时队列类,处理程序描述类,哈希表类这四个大类. Handler相关类概述 处理程序相关类一共有三个,其没有派生继承关系,但是其有友元关系和使用关系 ...

  6. Android Handler练习

    package com.example.myact12; import java.util.Random; import android.support.v7.app.ActionBarActivit ...

  7. Android Handler简单使用

    package com.example.myhandlertest3; import android.os.Bundle; import android.os.Handler; import andr ...

  8. android 技术相关Blog

    android 技术相关 LVXIANGAN的专栏 http://blog.csdn.net/LVXIANGAN/article/category/1101038 Android NFC 开发实例 h ...

  9. Android Handler的使用

    大家好我们这一节讲的是Android Handler的使用,在讲Handler之前,我们先提个小问题,就是如何让程序5秒钟更新一下Title. 首先我们看一下习惯了Java编程的人,在不知道Handl ...

随机推荐

  1. SharePoint 2013 Nintex Workflow 工作流帮助(六)

    博客地址 http://blog.csdn.net/foxdave 工作流动作 7. Call web service(Integration分组) 一个调用WebService的操作. 自然,配置项 ...

  2. 知道创宇研发技能表v3.0

    知道创宇研发技能表v3.0 2015/8/21 发布 by @知道创宇(www.knownsec.com) @余弦 & 404团队 后续动态请关注微信公众号:Lazy-Thought 说明 关 ...

  3. jsCodeWar 多函数嵌套调用

    function compose(f, g) { return function() { return f(g.apply(this, arguments)); }; } --- function c ...

  4. [转]dev C++编写windows程序遇到问题

    1.工具-编译选项-编译器-在连接器命令行加入以下命令: -mwindows 2.出现错误:undefined reference to `PlaySoundA@12' 解决办法:工具-编译选项-编译 ...

  5. C++ offsetof

    这是一个宏,用于计算类中某个成员的地址相对于类实例的偏移量 在C++11中,要求这个类standard_layout 基本用法是这样子的: #include <stdio.h> /* pr ...

  6. Python入门(二,基础)

    一,基本语法 Python标识符 在python里,标识符有字母.数字.下划线组成. 在python中,所有标识符可以包括英文.数字以及下划线(_),但不能以数字开头. python中的标识符是区分大 ...

  7. Mac 将mysql路径加入环境变量

    1.打开终端,输入: cd ~ 会进入~文件夹 2.然后输入:touch .bash_profile 回车执行后, 2.再输入:open -e .bash_profile 会在TextEdit中打开这 ...

  8. MongoDB在Windows下安装及配置

    第一步 下载MongoDB http://www.mongodb.org/downloads 第二步 解压到D:\mongodb\目录下,为了命令行的方便,可以把D:\mongodb\bin加到系统环 ...

  9. HDU 5784 (计算几何)

    Problem How Many Triangles (HDU 5784) 题目大意 给定平面上的n个点(n<2000),询问可以组成多少个锐角三角形. 解题分析 直接统计锐角三角形较困难,考虑 ...

  10. [转]Golang Gob编码

    Golang Gob编码 2012-08-24 09:47 by 轩脉刃, 5119 阅读, 1 评论, 收藏, 编辑 gob是Golang包自带的一个数据结构序列化的编码/解码工具.编码使用Enco ...