文档章节

Android中实现定时器的四种方式

Yao--靠自己
 Yao--靠自己
发布于 05/16 09:21
字数 522
阅读 35
收藏 2

Android中实现定时器的四种方式

第一种方式利用Timer和TimerTask

1、继承关系

java.util.Timer

基本方法

schedule

例如:

[java] view plaincopyprint?

timer.schedule(task, delay,period);   
//delay为long,period为long:从现在起过delay毫秒以后,每隔period毫秒执行一次。   

 

schedule方法有三个参数

第一个参数就是TimerTask类型的对象,我们实现TimerTask的run()方法就是要周期执行的一个任务;

第二个参数有两种类型,第一种是long类型,表示多长时间后开始执行,另一种是Date类型,表示从那个时间后开始执行;

第三个参数就是执行的周期,为long类型。

 

2、

[java] view plaincopyprint?

TimerTask  task= new TimerTask() {  
         @Override  
         public void run() {  
                count++;  
                Log.i("MainActivity",count + "");  
         }  
};  

 

//以下是几种调度task的方法: 

 

[java] view plaincopyprint?

//time为Date类型:在指定时间执行一次。    
timer.schedule(task, time);    
//firstTime为Date类型,period为long,表示从firstTime时刻开始,每隔period毫秒执行一次。   
timer.schedule(task, firstTime,period);       
//delay 为long类型:从现在起过delay毫秒执行一次。    
timer.schedule(task, delay);     
//delay为long,period为long:从现在起过delay毫秒以后,每隔period毫秒执行一次。   
timer.schedule(task, delay,period);   

 

注意:task应该在onDestory()中取消掉,否则可能发生崩溃 

 

3、用TimerTask定时进行某些操作的APP,即使退出了,TimerTask中依然会运行一会,但是不能长时间运行

 

第二种方式 使用CountDownTimer

 

1、Demo

 

[java] view plaincopyprint?

CountDownTimer cdt = new CountDownTimer(10000, 100) {  
    @Override  
    public void onTick(long millisUntilFinished) {  
        tv_hello.setText(millisUntilFinished + "");  
    }  
    @Override  
    public void onFinish() {  
          
    }  
};  
  
cdt.start();  
 

 

2、上面的例子是

每隔100毫秒执行onTick中的方法一次

直到执行完10000/100次为止,最后会执行onFinish()中的方法

第三种方式 AlarmManager

demo:

 

 

[java] view plaincopyprint?

Intent intent2 = newIntent(ReadLogService.this,TestBroadcast.class);  
PendingIntent pd =PendingIntent.getBroadcast(getApplicationContext(), 0, intent2,PendingIntent.FLAG_ONE_SHOT);  
AlarmManager am = (AlarmManager)getSystemService(ALARM_SERVICE);  
long triggerTime =SystemClock.elapsedRealtime() + 5*1000;  
am.set(AlarmManager.ELAPSED_REALTIME,triggerTime, pd);  


第三种方式 AlarmManager

 

[java] view plaincopyprint?

handler.sendEmptyMessageDelayed(0, 4000);//启动handler,实现4秒定时循环执行  
private Handler handler = new Handler(){  
public voidhandleMessage(android.os.Message msg) {  
                     
           if(isChange){  
                    //逻辑处理  
              
                        handler.sendEmptyMessageDelayed(0,4000);//4秒后再次执行  
            }  
  }  
};  

 

© 著作权归作者所有

共有 人打赏支持
Yao--靠自己
粉丝 2
博文 44
码字总数 20071
作品 0
哈尔滨
程序员
Android数据的四种存储方式之一——总览

Android数据的四种存储方式SharedPreferences、SQLite、Content Provider和File (一) —— 总览 作为一个完成的应用程序,数据存储操作是必不可少的。因此,Android系统一共提供了四种数据...

Airship
2015/03/25
0
0
Android数据的四种存储方式之三——SharedPreferences

Android数据的四种存储方式SharedPreferences、SQLite、Content Provider和File (三) —— SharePreferences 除了SQLite数据库外,SharedPreferences也是一种轻型的数据存储方式,它的本质...

Airship
2015/03/25
0
0
Android singleTask+askAffinity的使用方式

Android创建模式 在四种创建模式中最长用的应该是默认方式 standard,其次是singleTask,下来是singleTop,最后是singleInstance 这几种创建模式中,往往影响的是Activity的BackStack(回退栈)。...

IamOkay
2014/11/02
0
0
android学习code3 布局上

andriod系统是一个基于事件驱动行为一种系统 andirod添加事件驱动有四种方式 第一种自定义一个内部类实现OnclickListener private class MyListenner implements OnclickListener{ public vo...

wsl_Mr
2015/08/06
0
0
Android:SharedPreferences解析和实现记住用户名

SharedPreferences SharedPreferences是Android平台上一个轻量级的存储类,主要是保存一些常用的配置比如窗口状态,它提供了Android平台常规的Long长整形、Int整形、String字符串型的保存。S...

岑浩源
2012/11/28
0
0

没有更多内容

加载失败,请刷新页面

加载更多

【挑战剑指offer】系列03:逆序打印单链表

本系列的算法原题来自于“牛客网-剑指offer”,写这个板块,不仅仅是解决算法问题本身,更是手动提高难度、自行变式,思考更多的解决方案,以带给自己一些启发。 1. 【逆序打印单链表】原始题...

LinkedBear
10分钟前
1
0
Linux内存布局

今天这篇文章主要是我之前看Linux内核相关知识和博客Gustavo Duarte中。我主要是看了这篇博客,并且结合之前的知识,对内存管理的的理解又上升了一个档次。所以想通过这篇文章总结下。 我们先...

linuxprobe16
29分钟前
1
0
day94-20180921-英语流利阅读-待学习

记录死亡还是消费死者?自杀报道的媒体偏见 雪梨 2018-09-21 1.今日导读 自杀事件报道一直是新闻报道的重要部分,具有骇人听闻、吸引眼球的特点。可是在报道这些事件的时候,除了客观陈述事实...

飞鱼说编程
35分钟前
3
0
如何通过 J2Cache 实现分布式 session 存储

做 Java Web 开发的人多数都会需要使用到 session (会话),我们使用 session 来保存一些需要在两个不同的请求之间共享数据。一般 Java 的 Web 容器像 Tomcat、Resin、Jetty 等等,它们会在...

红薯
今天
3
0
C++ std::thread

C++11提供了std::thread类来表示一个多线程对象。 1,首先介绍一下std::this_thread命名空间: (1)std::this_thread::get_id():返回当前线程id (2)std::this_thread::yield():用户接口...

yepanl
今天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部