文档章节

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

Yao--靠自己
 Yao--靠自己
发布于 2018/05/16 09:21
字数 522
阅读 151
收藏 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--靠自己
粉丝 3
博文 56
码字总数 22150
作品 0
哈尔滨
程序员
私信 提问
Activity启动模式(GIF 动态演示)

Activity的启动模式 本文首发在我的个人微信公众号:Android开发圈 引言 关于Activity的启动模式是面试高频问题,在平时开发中,作用也不小,所以还是很有必要搞懂这一块的知识。其实之前也有...

MRYangY
05/12
0
0
Flutter 动画详解(一)

本文主要介绍了动画的原理相关概念,对其他平台的动画做了一个简要的梳理,并简要的介绍了Flutter动画的一些知识。 1. 动画介绍 动画对于App来说,非常的重要。很多App,正是因为有了动画,所...

Q吹个大气球Q
2018/10/29
0
0
Android中的几种网络请求方式详解

Android应用经常会和服务器端交互,这就需要手机客户端发送网络请求,下面介绍四种常用网络请求方式,我这边是通过Android单元测试来完成这四种方法的,还不清楚Android的单元测试的同学们请...

天高空
2011/12/29
4.8K
4
Android数据的四种存储方式之一——总览

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

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

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

Airship
2015/03/25
33
0

没有更多内容

加载失败,请刷新页面

加载更多

Spring Security 实战干货:实现自定义退出登录

1. 前言 上一篇对 Spring Security 所有内置的 Filter 进行了介绍。今天我们来实战如何安全退出应用程序。 2. 我们使用 Spring Security 登录后都做了什么 这个问题我们必须搞清楚!一般登录...

码农小胖哥
21分钟前
6
0
JVM核心知识-类加载机制

JVM中类的生命周期包括7个阶段,加载、准备、验证、解析、初始化、使用、卸载。其中准备、验证、解析被归为连接阶段。 加载 jvm在这个阶段完成的工作 通过类名获取类的二进制字节流 将这个字...

moon888
21分钟前
5
0
.net工作流引擎ccflow流程结束相关功能的介绍

关键字: 工作流程管理系统 工作流引擎 asp.net工作流引擎 java工作流引擎. 表单引擎 工作流功能说明 工作流设计 工作流快速开发平台 业务流程管理 bpm工作流系统 java工作流主流框架 自定义...

孟娟
35分钟前
5
0
APP 值入轻量级钱包以太坊网络钱包

APP 值入轻量级钱包以太坊网络钱包

xiaodong16
39分钟前
4
0
云原生下数据治理的微服务架构

摘要: 现代软件发展历程中,微服务概念早在2014年由两位美国学者提出,2015年云原生也在linux基金会的推动下茁壮成长。短短几年,越来越多的公司投入研究,越来越多的技术框架孕育而生。本文...

恒宝乐园
46分钟前
7
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部