- 浏览: 611290 次
文章分类
最新评论
-
q781253433:
qin ~.求demo看看~
Android之Widget -
zhongyuanceshi:
博主,没看到你的例子的Demo,共享下
Android之Widget
在Android
中,经常用到的定时器主要有以下几种实现:
一、采用Handler与线程的sleep(long )方法
二、采用Handler的postDelayed(Runnable, long) 方法
三、采用Handler与timer及TimerTask结合的方法。
下面逐一介绍:
一、采用Handle与线程的sleep(long )方法
Handler主要用来处理接受到的消息。这只是最主要的方法,当然Handler里还有其他的方法供实现,有兴趣的可以去查API,这里不过多解释。
1.定义一个Handler类,用于处理接受到的Message.
Handler handler = new Handler() {
public void handleMessage(Message msg) {
//要做的事情
super.handleMessage(msg);
}
};
2.新建一个实现Runnable接口的线程类。如下:
public class MyThread implements Runnable{
@Override
public void run() {
// TODO Auto-generated method stub
while (true) {
try {
Thread.sleep(10000);//线程暂停10秒,单位毫秒
Message message=new Message();
message.what=1;
handler.sendMessage(message);//发送消息
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
new Thread(new MyThread()).start();
4.启动线程后,线程每10s发送一次消息。
package com.quding.thread; import android.app.Activity; import android.os.Bundle; import android.os.Handler; import android.os.Looper; import android.os.Message; import android.util.Log; import android.widget.TextView; public class MyCounter extends Activity{ private TextView mTextView; private Handler handler; private int count; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.mycounter); mTextView = (TextView) findViewById(R.id.mycounter_textView); handler = new Handler(Looper.getMainLooper()){ @Override public void handleMessage(Message msg) { super.handleMessage(msg); if(msg.what == 1){ //添加要干的事情 count++; mTextView.setText(count + ""); } } }; new Thread(new MyThread()).start(); Log.e("tag", "cehsi"); } public class MyThread implements Runnable{ public void run() { while(true){ try { Message message = new Message(); message.what = 1; Thread.sleep(1000); //间隔时间在这里定 //通过handler把这个线程的线程体放到主线程的消息队列中,使得该线程在主线程中执行 handler.sendMessage(message); } catch (Exception e) { e.printStackTrace(); } } } } }
二、采用Handler的postDelayed(Runnable, long) 方法
这个实现比较简单一些:
1. Handler handler=new Handler();
Runnable runnable=new Runnable(){
@Override
public void run() {
// TODO Auto-generated method stub
//要做的事情
handler.postDelayed(this, 2000);
}
};
2.启动计时器:
handler.postDelayed(runnable, 2000);//每两秒执行一次runnable.
3.停止计时器:
handler.removeCallbacks(runnable);
package com.quding.thread; import android.app.Activity; import android.os.Bundle; import android.os.Handler; import android.os.Looper; import android.os.Message; import android.util.Log; import android.widget.TextView; public class MyCounter extends Activity{ private TextView mTextView; private Handler handler; private int count; private Runnable myRunnable; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.mycounter); mTextView = (TextView) findViewById(R.id.mycounter_textView); handler = new Handler(Looper.getMainLooper()); myRunnable = new Runnable(){ @Override public void run() { //此处添加每个一段时间要执行的语句 count++; mTextView.setText(count + ""); handler.postDelayed(this, 1000); } }; //启动计时器 handler.postDelayed(myRunnable, 1000); } @Override protected void onStop() { super.onStop(); handler.removeCallbacks(myRunnable); } }
三、采用Handler与timer及TimerTask结合的方法。
1.定义定时器、定时器任务及Handler句柄
private final Timer timer = new Timer();
private TimerTask task;
Handler handler = new Handler() {
@Override
public void handleMessage(Message msg) {
// TODO Auto-generated method stub
//要做的事情
super.handleMessage(msg);
}
};
2.初始化计时器任务。
task = new TimerTask() {
@Override
public void run() {
// TODO Auto-generated method stub
Message message = new Message();
message.what = 1;
handler.sendMessage(message);
}
};
3.启动定时器
timer.schedule(task, 2000, 2000);
简要说一下上面三步提到的一些内容。
1.定时器任务(TimerTask)顾名思义,就是说当定时器到达指定的时间时要做的工作,这里是想Handler发送一个消息,由Handler类进行处理。
2. java.util.Timer.schedule(TimerTask task, long delay):这个方法是说,dalay/1000秒后执行task.只执行一次。
java.util.Timer.schedule(TimerTask
task, long delay, long
period):这个方法是说,delay/1000秒后执行task,然后进过period/1000秒再次执行task,这个用于循环任务,执行无数
次,当然,你可以用timer.cancel();取消计时器的执行。
package com.quding.thread; import java.util.Timer; import java.util.TimerTask; import android.app.Activity; import android.os.Bundle; import android.os.Handler; import android.os.Looper; import android.os.Message; import android.util.Log; import android.widget.TextView; public class MyCounter extends Activity{ private TextView mTextView; private Handler handler; private int count; private Timer timer = new Timer(); @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.mycounter); mTextView = (TextView) findViewById(R.id.mycounter_textView); handler = new Handler(Looper.getMainLooper()){ @Override public void handleMessage(Message msg) { super.handleMessage(msg); if(msg.what == 1){ count++; mTextView.setText(count + ""); } } }; TimerTask task = new TimerTask() { @Override public void run() { Message msg =new Message(); msg.what = 1; handler.sendMessage(msg); } }; timer.schedule(task, 10000, 1000); // 第二个参数是定时开始计时,第三个参数是时间间隔 } }
发表评论
-
Android之Fastboot、Recovery基础知识
2013-12-19 22:13 1011参考文章: http://blog.csdn.net/y9 ... -
Eclipse设置主题
2013-10-26 22:32 660下载自己喜欢的主题: http://eclipsec ... -
gitignore文件的配置
2013-09-24 15:29 1685gitignore文件在Android ... -
Eclipse安装Git插件
2013-09-24 14:20 730http://jiangli.easymorse.com/?p ... -
Eclipse像Xcode一样自动有提示
2013-09-05 17:04 11781. 打开Eclipse,然后打开“Preferences ... -
点九PNG技术
2013-04-16 13:26 844参考文章: http://blog.csdn.net/g ... -
Android ASE 脚本环境
2013-04-10 12:32 1152原文: http://blog.sina.com.cn/ ... -
android 按两次返回键退出
2012-12-25 20:01 1273package com.anjoyo.test; ... -
android混淆代码总结
2012-12-19 18:02 1484反编译工具下载地址:http://ishare.iask.si ... -
System.out.printf输出格式
2012-12-13 22:01 2154// 定义一些变量,用来格式化输出。 double ... -
Regex正则表达式的使用
2012-12-09 20:20 1740正则表达式是用来描述某些字符串规则的工具,可以用此规则来做 ... -
IOS&Android开发 使用特殊字体,使用自定义字体
2012-11-24 00:16 1520IOS开发: 原文链接:http://tieba.baidu ... -
AspectJ的安装和Eclipse的AJDT插件的配置
2012-11-19 15:21 4889安装AspectJ是为了正常使用软件MonkeyTalk 1 ... -
Mac配置android开发环境
2012-11-13 16:18 48一.Eclipse的下载 到网站:http ... -
RelativeLayout相关属性
2012-11-13 14:49 936android:layout_centerInP ... -
Android资源文件
2012-11-04 15:22 914res [res中共有10种文 ... -
activity的启动方式(launch mode)
2012-11-04 15:14 820其他很详细的参考:http://blog.csdn.net/b ... -
android分享功能的实现(分享到微博空间等)
2012-11-03 22:15 2167//Intent intent = new Inten ... -
Android开发环境配置
2012-11-03 20:04 8451、JDK安装: http://jing ... -
android intent和intent action大全
2012-09-13 20:25 1022android 中intent是经常要用到的。不管是页面 ...
相关推荐
MFC MultiThread(多线程三个实例)This file contains a summary of what you will find in each of the files that make up your MultiThread11 application.
JavaSE多线程三PPT教案学习.pptx
(免费使用包更新)最新版高线程三无取邮箱ck最新版高线程取邮箱ck
论文利用多核处理器所带来的硬件性能和面向对象技术所带来的开发效率的提升,将并行并发同面向对象技术融合,实现了面向对象的多线程并行实时三维引擎。新的实时三维引擎既具有面向对象特征,又使程序并行运行变得容易...
以下是一个在线程中生成随机数的示例,为了能将生成的随机数显示出来
调锁调了蛮多时间.单线程序抓包,三个缓冲区, 默认三个线程进行处理.由于为了尽量保证包的顺序,三个线程同时只从一个缓冲区取数据
JVM+多线程面试题最全版
在多线程编程这块,我们经常要使用Handler(处理),Thread(线程)和Runnable这三个类,那么他们之间的关系你是否弄清楚了呢? 首先说明Android的CPU分配的最小单元是线程,Handler一般是在某个线程里创建的,因而...
今天小编就为大家分享一篇关于Java创建线程三种方式的优缺点,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
三个C#线程的例子三个C#线程的例子三个C#线程的例子三个C#线程的例子
java启动线程三种方式:线程有哪些启动方式呢?希望下面的文章对大家有所帮助。 1.继承Thread publicclassjava_threadextendsThread{ publicstaticvoidmain(Stringargs[]) { (newjava_thread()).run...
主要介绍了Java线程三种命名方法详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
1.使用三种VC的多线程同步方法编写一个多线程的程序(要求在屏幕上先显示Hello,再显示World)。 1)基于全局变量的多线程同步程序; 2)基于事件的多线程同步程序; 3)基于临界区的多线程同步程序。
JAVA线程 第三版 线程死锁,线程同步,等等
操作系统实验(三)线程的互斥 操作系统实验(三)线程的互斥
C#的多线程机制探索 doc 一.多线程的概念 二.操纵一个线程 三.线程的同步和通讯——生产者和消费者 四、线程池和定时器——多线程的自动管理
多线程 在 三维 场景 中的应用 。 openmp
三、例子 /** * 实现Runnable接口的类 * * @author leizhimin 2008-9-13 18:12:10 */ public class DoSomething implements Runnable { private String name; public DoSomething(String name) { this...
创建一个带三个子线程的程序,第一个线程启动10ms后,第二个线程再启动,然后再等待10ms后第三个线程启动,每一个线程从1—1000循环输出线程的名称和计数,当三个线程结束时要输出各自的结束信息,然后主线程结束。
JAVA线程第三版(chm)