Android基于AlarmManager实现用户在线心跳功能示例
作者:jia635 发布时间:2021-12-02 20:26:46
标签:Android,AlarmManager
本文实例讲述了Android基于AlarmManager实现用户在线心跳功能。分享给大家供大家参考,具体如下:
在做即时通信或者其他检测是否在线等操作时要用到心跳。比较常用的是AlarmManager全局定时器 去实现。
AlarmManager的使用机制有的称呼为全局定时器,有的称呼为闹钟。其实它的作用和Timer有点相似。都有两种相似的用法:(1)在指定时长后执行某项操作(2)周期性的执行某项操作
AlarmManager对象配合Intent使用,可以定时的开启一个Activity,发送一个BroadCast,或者开启一个Service.
下面的代码详细的介绍了两种定时方式的使用:
(1)在指定时长后执行某项操作
//操作:发送一个广播,广播接收后Toast提示定时操作完成 Intent intent =new Intent(Main.this, alarmreceiver.class);
intent.setAction("short");
PendingIntent sender= PendingIntent.getBroadcast(Main.this, 0, intent, 0);
//设定一个五秒后的时间
Calendar calendar=Calendar.getInstance();
calendar.setTimeInMillis(System.currentTimeMillis());
calendar.add(Calendar.SECOND, 5);
AlarmManager alarm=(AlarmManager)getSystemService(ALARM_SERVICE);
alarm.set(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), sender);
//或者以下面方式简化
//alarm.set(AlarmManager.RTC_WAKEUP, System.currentTimeMillis()+5*1000, sender);
Toast.makeText(Main.this, "五秒后alarm开启", Toast.LENGTH_LONG).show();
注意:receiver记得在manifest.xml注册
public static class alarmreceiver extends BroadcastReceiver{
@Override
public void onReceive(Context context, Intent intent) {
// TODO Auto-generated method stub
if(intent.getAction().equals("short")){
Toast.makeText(context, "short alarm", Toast.LENGTH_LONG).show();
}else{
Toast.makeText(context, "repeating alarm", Toast.LENGTH_LONG).show();
}
}
}
(2)周期性的执行某项操作
Intent intent =new Intent(Main.this, alarmreceiver.class);
intent.setAction("repeating");
PendingIntent sender=PendingIntent
.getBroadcast(Main.this, 0, intent, 0);
//开始时间
long firstime=SystemClock.elapsedRealtime();
AlarmManager am=(AlarmManager)getSystemService(ALARM_SERVICE);//5秒一个周期,不停的发送广播
am.setRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP, firstime, 5*1000, sender);
AlarmManager的setRepeating()
相当于Timer的Schedule(task,delay,peroid);
有点差异的地方是Timer这个方法是指定延迟多长时间以后开始周期性的执行task;
AlarmManager的取消:(其中需要注意的是取消的Intent必须与启动Intent保持绝对一致才能支持取消AlarmManager)
Intent intent =new Intent(Main.this, alarmreceiver.class);
intent.setAction("repeating");
PendingIntent sender=PendingIntent.getBroadcast(Main.this, 0, intent, 0);
AlarmManager alarm=(AlarmManager)getSystemService(ALARM_SERVICE);
alarm.cancel(sender);
希望本文所述对大家Android程序设计有所帮助。
来源:http://blog.csdn.net/jia635/article/details/45577563


猜你喜欢
- 本文为大家介绍了java图片添加水印实例代码,java实现水印还是非常方便的,水印可以是图片或者文字,具体内容如下package micha
- Java Comparable 和 Comparator 的详解及区别Java 中为我们提供了两种比较机制:Comparable 和 Com
- 一、表创建一、表创建//创建一个空表DataTable dt = new DataTable();//创建一个名为"Table_N
- C++实现接两个链表实例代码有以ha为头结点的链表,元素个数为m;以hb为头结点的链表,元素个数为n。现在需要你把这两个链表连接
- System.Threading.Mutex :同步基元,它只向一个线程授予对共享资源的独占访问权。实现原理: 在程序启动时,请求一个互斥体
- 前言:学习二叉树的基本操作前,需要先创建一颗二叉树,然后才能学习其相关的基本操作,考虑到我们刚刚接触二叉树,为了能够先易后难地进行讲解,我们
- view plaincopy to clipboardprint?//手动保存图片 &nbs
- 前言最近搭建的springbootboot的网关,配置请求路径,竟然没有生效现象配置文件如下:启动类,控制台打印的结果如下:我随便更换端口都
- 概述Handler是Android消息机制的上层接口。通过它可以轻松地将一个任务切换到Handler所在的线程中去执行。通常情况下,Hand
- poi解析Excel文件版本问题解决办法poi解析Excel文件时有两种格式: HSSFWorkbook格式用来解析Excel2003(xl
- 本文实例讲述了C#实现将Email地址转成图片显示的方法。分享给大家供大家参考。具体实现方法如下:private final static
- 基于opencv的车道线检测,供大家参考,具体内容如下原理:算法基本思想说明:传统的车道线检测,多数是基于霍夫直线检测,其实这个里面有个很大
- 先如今idea中的spring项目,springBoot的项目的开发一般都是基于maven创建的项目。这大大简化我我们对于各种依赖包的管理,
- 有的时候需要根据要查询的参数动态的拼接SQL语句常用标签:- if:字符判断- choose【when...otherwise】:分支选择-
- 一、前言:垃圾回收:在未来的JDK中可能G1会为ZGC所取代先问自己几个问题:什么是垃圾?垃圾就是堆内存中(范指)没有任何指针指向的对象实体
- 相信大家肯定都在电商网站买过东西,当我们看中一件喜欢又想买的东西时,这时候你又不想这么快结账,这时候你就可以放入购物车;就像我们平时去超市买
- 首先贴一下搭配的环境:配置:Eclipse4.3.2jdk1.7_45Mysql 5.0+然后切入正题:1、login.jsp主要是使用OG
- 一、前言前面我们介绍了运算符的一部分运算符,现在我们把剩余的他介绍完全来二、运算符赋值运算符所谓赋值,就是一个等于号连接的两个如int a=
- 解释:二叉树的深度:从根结点到叶结点依次经过的结点(含根、叶结点)形成树的一条路径,最长路径的长度为树的深度。二叉树的宽度:二叉树的每一层中
- 一、类加载流程类加载的流程可以简单分为三步:加载连接初始化而其中的连接又可以细分为三步:验证准备解析下面会分别对各个流程进行介绍。1.1 类