Android学习之多线程复习——倒计时

今天周六,离职在家,复习了一下多线程的一些知识

然后写了一个简单的倒计时程序:

以下是我的activity_main的布局文件:

 1 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 2     xmlns:tools="http://schemas.android.com/tools"
 3     android:layout_width="match_parent"
 4     android:layout_height="match_parent"
 5     android:orientation="vertical">
 6
 7     <EditText
 8         android:layout_width="fill_parent"
 9         android:layout_height="wrap_content"
10         android:id="@+id/etTime"/>
11
12     <Button
13         android:id="@+id/btnGetTime"
14         android:layout_width="wrap_content"
15         android:layout_height="wrap_content"
16         android:text="@string/countTime" />
17
18     <TextView
19         android:id="@+id/tvShowTime"
20         android:layout_width="fill_parent"
21         android:layout_height="wrap_content"
22         android:text="" />
23
24     <Button
25         android:id="@+id/btnStart"
26         android:layout_width="wrap_content"
27         android:layout_height="wrap_content"
28         android:text="@string/start" />
29
30     <Button
31         android:id="@+id/btnStop"
32         android:layout_width="wrap_content"
33         android:layout_height="wrap_content"
34         android:text="@string/stop" />
35
36 </LinearLayout>

就是一个EditText,一个TextView,三个按钮,没了
然后就是我的MainActivity的代码:

 1 package com.oysd.counttime;
 2
 3 import java.util.Timer;
 4 import java.util.TimerTask;
 5
 6 import android.app.Activity;
 7 import android.os.Bundle;
 8 import android.os.Handler;
 9 import android.os.Message;
10 import android.view.Menu;
11 import android.view.MenuItem;
12 import android.view.View;
13 import android.view.View.OnClickListener;
14 import android.widget.Button;
15 import android.widget.EditText;
16 import android.widget.TextView;
17
18 public class MainActivity extends Activity implements OnClickListener {
19
20     //声明一下要用到的控件
21     private EditText etTime;
22     private Button btnGetTime,btnStart,btnStop;
23     private TextView tvShowTime;
24     private int i = 0;
25     private Timer timer;
26     private TimerTask task;
27
28     private Handler mHandler = new Handler(){
29         public void handleMessage(android.os.Message msg) {
30             tvShowTime.setText(msg.arg1 + "");
31             startTime();
32         };
33     };
34
35     @Override
36     protected void onCreate(Bundle savedInstanceState) {
37         super.onCreate(savedInstanceState);
38         setContentView(R.layout.activity_main);
39         initView();
40     }
41
42     private void initView(){
43         etTime = (EditText) findViewById(R.id.etTime);
44         tvShowTime = (TextView) findViewById(R.id.tvShowTime);
45         btnGetTime = (Button) findViewById(R.id.btnGetTime);
46         btnStart = (Button) findViewById(R.id.btnStart);
47         btnStop = (Button) findViewById(R.id.btnStop);
48
49         btnGetTime.setOnClickListener(this);
50         btnStart.setOnClickListener(this);
51         btnStop.setOnClickListener(this);
52     }
53
54     @Override
55     public void onClick(View v) {
56         switch(v.getId()){
57         case R.id.btnGetTime:
58             if(etTime.getText().toString().equals("")){
59                 tvShowTime.setText(0+"");
60                 i = 0;
61             }else{
62                 tvShowTime.setText(etTime.getText().toString());
63                 i = Integer.parseInt(tvShowTime.getText().toString());
64             }
65             break;
66         case R.id.btnStart:
67             startTime();
68             break;
69         case R.id.btnStop:
70             stopTime();
71             break;
72         }
73     }
74
75     private void startTime(){
76         timer = new Timer();
77         task = new TimerTask() {
78
79             @Override
80             public void run() {
81                 i--;
82                 Message message = new Message();
83                 message.arg1 = i;
84                 mHandler.sendMessage(message);
85             }
86         };
87         timer.schedule(task, 1000);
88     }
89
90     private void stopTime(){
91         timer.cancel();
92     }
93 }

在子线程里面,不要试图去修改主线程UI线程,不然会使界面响应卡死,需要用到handleMessage来操作UI线程

另外,使用Timer的同时,必定也要使用TimerTask,来实现时间的倒计时

时间: 2024-11-09 01:02:59

Android学习之多线程复习——倒计时的相关文章

android学习小例子——验证码倒计时按钮

1.activity_main.xml: 1 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 2 xmlns:tools="http://schemas.android.com/tools" 3 android:layout_width="match_parent" 4 android:layout_height="match_p

Android学习:Toast复习总结

        Toast.makeText(this.getApplication(), "hello toast^^^^^^", 1).show(); 1特点: (1)没有焦点 (2)显示的时间有限,会自动消失. 2:参数说明: 第一个参数:应用的上下文Context Context提供了关于应用环境全局信息的接口.它是一个抽象类,它的实现由 Android系统所提供.通过context我们可以加载资源,获取由android提供的一些 服务类. 在Android当中一般有两种con

【转】 Pro Android学习笔记(七一):HTTP服务(5):多线程调用HttpClient

目录(?)[-] 应用共享HttpClient对象的同步问题 创建共享HttpClient代码 创建共享对象 创建可共享的HttpClient对象 使用共享HttpClient对象的代码 基础代码 修改HTTP连接的参数 使用共同的Appcliation对象 文章转载只能用于非商业性质,且不能带有虚拟货币.积分.注册等附加条件,转载须注明出处:http://blog.csdn.net/flowingflying/ 应用共享HttpClient对象的同步问题 在之前的例子中,HttpClient只

[Android学习笔记]Android中多线程开发的一些概念

线程安全: 在多线程的情况下,不会因为线程之间的操作而导致数据错误. 线程同步: 同一个资源,可能在同一时间被多个线程操作,这样会导致数据错误.这是一个现象,也是一个问题,而研究如何解决此类问题的相关工作就叫做线程同步. android中,处理线程同步的手段就是:锁 一般分为公平锁和非公平锁: synchronized(内部锁,互斥锁):synchronized是JVM提供的线程同步机制,如果出现问题,JVM能捕获异常,并释放资源,具体实现机制需要查看JVM源码 synchronized的使用特

《Android学习指南》文件夹

转自:http://android.yaohuiji.com/about Android学习指南的内容分类: 分类 描写叙述 0.学习Android必备的Java基础知识 没有Java基础的朋友,请不要先看Android的课程,这样会非常累. 1.Android学习指南基础篇 对于有Java基础的朋友,能够通过本分类60讲左右的课程,打下比較坚实的基础. 2.Android学习指南项目实训篇 对于学过"1.Android2.2学习指南基础篇"的朋友,能够通过本分类项目的联系,加深对基础

udacity android学习笔记: lesson 3

udacity android学习笔记: lesson 3 作者:干货店打杂的 /titer1 /Archimedes 出处:https://code.csdn.net/titer1 联系:1307316一九六八 声明:本文采用以下协议进行授权: 自由转载-非商用-非衍生-保持署名|Creative Commons BY-NC-ND 3.0 ,转载请注明作者及出处. tips:https://code.csdn.net/titer1/pat_aha/blob/master/Markdown/an

四、Android学习第四天——JAVA基础回顾(转)

(转自:http://wenku.baidu.com/view/af39b3164431b90d6c85c72f.html) 四.Android学习第四天——JAVA基础回顾 这才学习Android的第四天,在程序中已经遇到了JAVA中以前不常用的一些知识点,赶紧回顾复习一下,打下基础 这里就做个简单的小结: 一.匿名内部类 匿名内部类说白了就是个没有被命名的JAVA类 在以下条件下使用匿名内部类比较适合: ①只用到该类的一个实例时 ②类在定义后被马上用到 ③类非常小(SUN推荐是在4行代码以下

《Android学习指南》目录

源:<Android学习指南>目录 Android学习指南的内容分类: 分类 描述 0.学习Android必备的Java基础知识 没有Java基础的朋友,请不要先看Android的课程,这样会很累. 1.Android学习指南基础篇 对于有Java基础的朋友,可以通过本分类60讲左右的课程,打下比较坚实的基础. 2.Android学习指南项目实训篇 对于学过“1.Android2.2学习指南基础篇”的朋友,可以通过本分类项目的联系,加深对基础知识的理解和熟练运用. 3.Android学习指南提

问题:android学习内容破碎,我个人关于如何学习android的一些个人经历

android学习两个月心得 我于大三下学期,开始准备学习android,在寒假期间,学了毕向东的java视频的前10天,觉得还不错,上网找评论,他们都说,只要学到多线程就可以学习android了, 开学我就开始了android的学习,做了一些简单的UI,实现了几个简单Activity的信息传递和跳转.但是在学习的过程中我发现(到目前为止,大概两个月),android的知识点就像是一片又一片的花瓣,你可以任意挑选这去学习,没有一个权威的方向. 各种视频教程,图书,包括android的官方开发文档