Android三种实现定时器的方法

本文对比了在Java中使用Handler配合不同方式实现定时器的三种方法:通过自定义线程和Handler接收数据、使用Handler自带的postDelayed方法、以及结合Timer和TimerTask实现。重点讨论了每种方法的实现原理、代码示例以及适用场景。

方法一:Handler+Thread

  1. package com.xunfang.handerDemo;  
  2.   
  3. import android.app.Activity;  
  4. import android.os.Bundle;  
  5. import android.os.Handler;  
  6. import android.os.Message;  
  7. import android.widget.TextView;  
  8.   
  9. /** 
  10.  * handler定时器 
  11.  *  
  12.  * @author Smalt 
  13.  *  
  14.  */  
  15. public class HanderDemoActivity extends Activity {  
  16.     TextView tvShow;  
  17.     private int i = 0;  
  18.   
  19.     @Override  
  20.     public void onCreate(Bundle savedInstanceState) {  
  21.         super.onCreate(savedInstanceState);  
  22.         setContentView(R.layout.main);  
  23.         tvShow = (TextView) findViewById(R.id.tv_show);  
  24.         new Thread(new ThreadShow()).start();  
  25.     }  
  26.   
  27.     // handler类接收数据  
  28.     Handler handler = new Handler() {  
  29.         public void handleMessage(Message msg) {  
  30.             if (msg.what == 1) {  
  31.                 tvShow.setText(Integer.toString(i++));  
  32.                 System.out.println("receive....");  
  33.             }  
  34.         };  
  35.     };  
  36.   
  37.     // 线程类  
  38.     class ThreadShow implements Runnable {  
  39.   
  40.         @Override  
  41.         public void run() {  
  42.             // TODO Auto-generated method stub  
  43.             while (true) {  
  44.                 try {  
  45.                     Thread.sleep(1000);  
  46.                     Message msg = new Message();  
  47.                     msg.what = 1;  
  48.                     handler.sendMessage(msg);  
  49.                     System.out.println("send...");  
  50.                 } catch (Exception e) {  
  51.                     // TODO Auto-generated catch block  
  52.                     e.printStackTrace();  
  53.                     System.out.println("thread error...");  
  54.                 }  
  55.             }  
  56.         }  
  57.     }  
  58. }  

方法二:Handler类自带的postDelyed
  1. package com.xunfang.handerDemo;  
  2.   
  3. import android.app.Activity;  
  4. import android.os.Bundle;  
  5. import android.os.Handler;  
  6. import android.widget.TextView;  
  7.   
  8. /** 
  9.  * handler定时器使用postDelyed实现 
  10.  *  
  11.  * @author Smalt 
  12.  *  
  13.  */  
  14. public class HanderDemoActivity extends Activity {  
  15.     TextView tvShow;  
  16.     private int i = 0;  
  17.     private int TIME = 1000;  
  18.   
  19.     @Override  
  20.     public void onCreate(Bundle savedInstanceState) {  
  21.         super.onCreate(savedInstanceState);  
  22.         setContentView(R.layout.main);  
  23.         tvShow = (TextView) findViewById(R.id.tv_show);  
  24.         handler.postDelayed(runnable, TIME); //每隔1s执行  
  25.     }  
  26.   
  27.     Handler handler = new Handler();  
  28.     Runnable runnable = new Runnable() {  
  29.   
  30.         @Override  
  31.         public void run() {  
  32.             // handler自带方法实现定时器  
  33.             try {  
  34.                 handler.postDelayed(this, TIME);  
  35.                 tvShow.setText(Integer.toString(i++));  
  36.                 System.out.println("do...");  
  37.             } catch (Exception e) {  
  38.                 // TODO Auto-generated catch block  
  39.                 e.printStackTrace();  
  40.                 System.out.println("exception...");  
  41.             }  
  42.         }  
  43.     };  
  44.   
  45. }  

方法三:

Handler+Timer+TimerTask

  1. package com.xunfang.handerDemo;  
  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.widget.TextView;  
  11.   
  12. /** 
  13.  * 定时器实现:Handler+Timer+TimerTask 
  14.  *  
  15.  * @author Smalt 
  16.  *  
  17.  */  
  18. public class HanderDemoActivity extends Activity {  
  19.     TextView tvShow;  
  20.     private int i = 0;  
  21.     private int TIME = 1000;  
  22.   
  23.     @Override  
  24.     public void onCreate(Bundle savedInstanceState) {  
  25.         super.onCreate(savedInstanceState);  
  26.         setContentView(R.layout.main);  
  27.         tvShow = (TextView) findViewById(R.id.tv_show);  
  28.         timer.schedule(task, 10001000); // 1s后执行task,经过1s再次执行  
  29.     }  
  30.   
  31.     Handler handler = new Handler() {  
  32.         public void handleMessage(Message msg) {  
  33.             if (msg.what == 1) {  
  34.                 tvShow.setText(Integer.toString(i++));  
  35.             }  
  36.             super.handleMessage(msg);  
  37.         };  
  38.     };  
  39.     Timer timer = new Timer();  
  40.     TimerTask task = new TimerTask() {  
  41.   
  42.         @Override  
  43.         public void run() {  
  44.             // 需要做的事:发送消息  
  45.             Message message = new Message();  
  46.             message.what = 1;  
  47.             handler.sendMessage(message);  
  48.         }  
  49.     };  

内容概要:本文系统阐述了Java Persistence API(JPA)的核心概念、技术架构、核心组件及实践应用,重点介绍了JPA作为Java官方定义的对象关系映射(ORM)规范,如何通过实体类、EntityManager、JPQL和persistence.xml配置文件实现Java对象与数据库表之间的映射与操作。文章详细说明了JPA解决的传统JDBC开发痛点,如代码冗余、对象映射繁琐、跨数据库兼容性差等问题,并解析了JPA与Hibernate、EclipseLink等实现框架的关系。同时提供了基于Hibernate和MySQL的完整实践案例,涵盖Maven依赖配置、实体类定义、CRUD操作实现等关键步骤,并列举了常用JPA注解及其用途。最后总结了JPA的标准化优势、开发效率提升能力及在Spring生态中的延伸应用。 适合人群:具备一定Java基础,熟悉基本数据库操作,工作1-3年的后端开发人员或正在学习ORM技术的中级开发者。 使用场景及目标:①理解JPA作为ORM规范的核心原理与组件协作机制;②掌握基于JPA+Hibernate进行数据库操作的开发流程;③为技术选型、团队培训或向Spring Data JPA过渡提供理论与实践基础。 阅读建议:此资源以理论结合实践的方式讲解JPA,建议读者在学习过程中同步搭建环境,动手实现文中示例代码,重点关注EntityManager的使用、JPQL语法特点以及注解配置规则,从而深入理解JPA的设计思想与工程价值。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值