android基础:handler与messag案例(计时器)

运行效果

代码文件

string.xml

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string name="action_settings">Settings</string>
    <string name="app_name">计时器</string>
    <string name="gettime">计时</string>
    <string name="starttime">开始</string>
    <string name="stoptime">停止</string>
    <string name="inputhint">请输入时间</string>
</resources>  

main.xml

<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:orientation="vertical"
    tools:context="com.mytest.mycounttime.MainActivity" >  

    <EditText
        android:id="@+id/inputTime"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:ems="10"
        android:hint="@string/inputhint"
        android:inputType="number" >
        <requestFocus />
    </EditText>  

    <Button
        android:id="@+id/getTime"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/gettime" />  

    <Button
        android:id="@+id/startTime"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/starttime" />  

    <Button
        android:id="@+id/stopTime"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/stoptime" />  

    <TextView
        android:id="@+id/timeView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />  

</LinearLayout>

 

activity.java

package com.mytest.mycounttime;  

import java.util.Timer;
import java.util.TimerTask;  

import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;  

public class MainActivity extends Activity {  

    private Button getTimeButton, startTimeButton, stopTimeButton;
    private EditText inputTimeText;
    private TextView timeViewText;  

    private int inputTime;
    private int currTime;
    private Timer timer;
    private TimerTask timerTask;
    private Handler handler = new MessageHandler();  

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);  

        // 页面元素赋值
        initView();  

        getTimeButton.setOnClickListener(new TimeButtonOnClickListener());
        startTimeButton.setOnClickListener(new TimeButtonOnClickListener());
        stopTimeButton.setOnClickListener(new TimeButtonOnClickListener());  

    }  

    private void initView() {
        getTimeButton = (Button) this.findViewById(R.id.getTime);
        startTimeButton = (Button) this.findViewById(R.id.startTime);
        stopTimeButton = (Button) this.findViewById(R.id.stopTime);
        inputTimeText = (EditText) this.findViewById(R.id.inputTime);
        timeViewText = (TextView) this.findViewById(R.id.timeView);
    }  

    private final class MessageHandler extends Handler {  

        @Override
        public void handleMessage(Message msg) {
            // timeViewText.setText(currTime);
            // 显示当前时间
            timeViewText.setText("时间:"+msg.arg1 + "");
            startTime();
        }  

    }  

    private final class TimeButtonOnClickListener implements View.OnClickListener {  

        @Override
        public void onClick(View v) {
            Log.v("info", "currTime:" + currTime);  

            switch (v.getId()) {
            case R.id.getTime:
                inputTime = Integer.parseInt(inputTimeText.getText().toString());
                currTime = inputTime;
                break;  

            case R.id.startTime:
                startTime();
                break;
            case R.id.stopTime:
                stopTime();
                break;  

            }  

        }  

    }  

    private void stopTime() {
        timer.cancel();  

    }  

    private void startTime() {  

        timer = new Timer();
        timerTask = new TimerTask() {  

            @Override
            public void run() {  

                Log.v("info", "currTime:" + currTime);  

                if (currTime <= 0) {
                    timer.cancel();
                    return;
                }  

                currTime--;  

                // 发送消息,传送当前时间
                Message message = handler.obtainMessage();
                message.arg1 = currTime;
                handler.sendMessage(message);
            }  

        };  

        timer.schedule(timerTask, 1000);  

    }  

}

  

时间: 2024-08-19 12:16:25

android基础:handler与messag案例(计时器)的相关文章

Android基础入门教程——3.3 Handler消息传递机制浅析

Android基础入门教程--3.3 Handler消息传递机制浅析 标签(空格分隔): Android基础入门教程 本节引言 前两节中我们对Android中的两种事件处理机制进行了学习,关于响应的事件响应就这两种:本节给大家讲解的 是Activity中UI组件中的信息传递Handler,相信很多朋友都知道,Android为了线程安全,并不允许我们在UI线程外操作UI:很多时候我们做界面刷新都需要通过Handler来通知UI组件更新!除了用Handler完成界面更新外,还可以使用runOnUiT

Android 基础总结:( 十四)Handler详解(上)

Handler的定义: 主要接受子线程发送的数据, 并用此数据配合主线程更新UI. 解释: 当应用程序启动时,Android首先会开启一个主线程 (也就是UI线程) , 主线程为管理界面中的UI控件,进行事件分发,比如说,你要是点击一个 Button ,Android会分发事件到Button上,来响应你的操作. 如果此时需要一个耗时的操作,例如:联网读取数据,或者读取本地较大的一个文件的时候,你不能把这些操作放在主线程中,如果你放在主线程中的话,界面会出现假死现象,如果5秒钟还没有完成的话,会收

Android中Handler的使用方法及实例(基础回顾)

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

【Android基础知识】【android多线程handler】

handler机制不需要明白太多,我认为可以参照例子来实现,每次使用的时候就用一下例子. 既有线程,又有mhandler对接收到的消息的处理. package com.hengtiansoft.sportnow.news.ui; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import android.app.Activity; import

Android基础知识【项目实训】【2】

[该项目实训是Android基础知识的一个综合练习,特别提示:项目中会用到一些图片素材,都是随意整理的,稍后会上传一个资源,包含该事项项目的基本功能,也含有图片素材] [项目题目]:校园订餐App设计 综合案例 [目标] 因为项目只涉及基础知识,因此项目中所用数据并不联网,都读取单机数据库.(即将该项目中所用数据,如菜品信息.店铺信息等存入数据库)用户在第一次打开该项目时,会在用户手机上创建这些数据库,并插入测试数据. 1.先制作一个欢迎界面,欢迎的同时,准备数据库 欢迎界面Activity对应

Android基础入门教程——2.2.4 FrameLayout(帧布局)

Android基础入门教程--2.2.4 FrameLayout(帧布局) 标签(空格分隔): Android基础入门教程 本节引言: FrameLayout(帧布局)可以说是六大布局中最为简单的一个布局,这个布局直接在屏幕上开辟出 一块空白的区域,当我们往里面添加控件的时候,会默认把他们放到这块区域的左上角,而这种布局方式 却没有任何的定位方式,所以它应用的场景并不多;帧布局的大小由控件中最大的子控件决定,如果控件 的大小一样大的话,那么同一时刻就只能看到最上面的那个组件!后续添加的控件会覆盖

Android基础入门教程——7.6.2 基于TCP协议的Socket通信(1)

Android基础入门教程--7.6.2 基于TCP协议的Socket通信(1) 标签(空格分隔): Android基础入门教程 本节引言: 上一节的概念课枯燥无味是吧,不过总有点收获是吧,本节开始我们来研究基于TCP协议的Socket 通信,先来了解下Socket的概念,以及Socket通信的模型,实现Socket的步骤,以及作为Socket服务 端与客户端的两位各做要做什么事情!好的,我们由浅入深来扣这个Socket吧! 1.什么是Socket? 2.Socket通信模型: Socket通信

android基础知识

1. 前言 1.1. 什么是3G.4G Ÿ 第三代移动通信技术(3rd - Generation),速率一般在几百Kbps,较之前的2G和2.5G在数据传输速度上有很大提升. Ÿ 第四代移动通信技术(4th - Generation),速度可达到100Mbps以上,几乎可以满足人们的所有传输数据的需求. Ÿ 目前主流的3G技术标准有三种: WCDMA:全球80%以上的3G网络都是采用此种制式.中国联通运营.186 CDMA2000:目前日韩及北美使用较多.中国电信运营. 189 TD-SCDMA

Android基础3

一.内容观察者的运行原理 运行过程通常为A应用对内容提供者暴露的数据进行修改,而B应用负则专门责监听内容提供者数据的变化. 1.简单的小演示 首先在内容提供者写一个MyContentProvider类继承ContentProvider如下 public class MyContentProvider extends ContentProvider 继承后会自动重写6个方法(增删改查onCreat和getBytes)在B应用对应修改的方法(增删改)中发出通知,getContext().getCon