您当前的位置:首页 > 今日分享头条 > 正文

alarmmanager(AlarmManager设置时间间隔能设置一周吗)

本文目录

  • AlarmManager设置时间间隔能设置一周吗
  • AlarmManager定时不准,怎么办
  • alarmManager.set()里面的参数不懂
  • android定时器alarmmanager和timer的区别
  • android alarmmanager需要权限吗
  • android alarmmanager如果设置过去的时间就会触发广播
  • android app被杀死 alarmmanager能不能唤醒

AlarmManager设置时间间隔能设置一周吗

比如现在的时间是7:00,我设置闹钟为6:00,则闹钟马上会启动。但是如果设置为8:00,则闹钟不会立即启动而是在8:00准时启动。被这个问题纠结了一天,把自己的代码和网上其他人开发的闹钟程序代码比来比去没有什么差别,可就是无法解决这个问题,终于在刚刚又看了一下核心函数,由其传入的参数发现了问题的所在。 网上主流的闹钟程序一定用到了下面两行程序: view plain copyam= (AlarmManager) getSystemService(Activity.ALARM_SERVICE); am.set(AlarmManager.RTC_WAKEUP, c_set.getTimeInMillis(), pIntent); 注意第二行set方法的第一和第二个参数,第一个参数表明使用的是绝对时间,而第二个参数说明是自1970年1月1日0:00至Calendar实例对象设定的时间的毫秒数。好,问题迎刃而解:如果现在的时间是7:00,那么你设定6:00的闹钟,在set方法中传入的第二个参数的值就会比现在的系统时间的getTimeInMillis()值要小,那么任务启动时间早已经提前到了1个小时,所以系统马上响应这个定时任务。 这样看来,网上那些主流的闹钟开发教程就都面临一个通病,就是如果设定的闹钟时间比当前时间小(即想要闹钟在第二天某一时间响),那么就需要在set方法前先做一个判定,判定设定的闹钟时间和当前的系统时间的大小关系:如果设定的时间比系统时间大,那么不用做什么额外的操作,正常调用AlarmManager的set方法即可;反之如果设定的闹钟时间比当前时间小,那么需要把Calendar实例对象的Day变量自加1: view plain copyif(c_cur.getTimeInMillis()》 c_set.getTimeInMillis()){ c_set.set(Calendar.DAY_OF_YEAR, c_set.get(Calendar.DAY_OF_YEAR) + 1); } 代码中c_set为闹钟设定时间的Calendar实例对象,c_cur为当前系统时间的Calendar实例对象。值得注意的是:DAY_OF_YEAR不要写成DAY,写成DAY_OF_YEAR的好处是不用考虑月份天数、进位等问题。

AlarmManager定时不准,怎么办

从API 19开始,alarm的机制都是非准确传递,操作系统将会转换闹钟,来最小化唤醒和电池使用。 有一些新的API会支持严格准确的传递,见 setWindow(int, long, long, PendingIntent)和setExact(int, long, PendingIntent)。 targetSdkVersion在API 19之前应用仍将继续使用以前的行为,所有的闹钟在要求准确传递的情况下都会准确传递。 setRepeating 方法在 API 19开始将会失去原来的效果

alarmManager.set()里面的参数不懂

Android中的定时任务一般有2种实现方式:1.使用JavaAPI里面的Timer类;2.使用Android的Alarm机制。这两种方式在多数情况下都能实现类似的效果,但是Timer有一个明显的短板,它并不适用于那些长期在后台运行的定时任务。我们都知道,为了能让电池更加耐用,每种手机都会有自己的休眠策略,Android手机就会在长时间不操作的情况下让CPU进入休眠状态,这就有可能导致Timer中的定时任务无法正常运行。而Alarm机制则不存在这种情况,它具有唤醒CPU的功能,即可以保证每次执行定时任务的时候CPU都能正常工作。这里要提醒一下,唤醒CPU和唤醒屏幕完全不是同一个概念,不能混淆。AlarmManager实例如下:AlarmManagermanager=(AlarmManager)getSystemService(Context.ALARM_SERVICE);longtriggerAtTime=SystemClock.elapsedRealtime()+10*1000; //10秒manager.set(AlarmManager.ELAPSED_REALTIME_WAKEUP,triggerAtTime,pendingIntent);其中set()方法的参数分析如下:第一个参数有4种值可选,分别是ELAPSED_REALTIME,ELAPSED_REALTIME_WAKEUP,RTC,RTC_WAKEUP。区别如下:ELAPSED_REALTIME让定时任务的触发时间从系统开机开始算起,但不唤醒CPUELAPSED_REALTIME_WAKEUP让定时任务的触发时间从系统开机开始算起,但会唤醒CPURTC让定时任务的触发时间从1970年1月1日0点开始算起,但不唤醒CPURTC_WAKEUP让定时任务的触发时间从1970年1月1日0点开始算起,但会唤醒CPUSystemClock.elapsedRealtime()方法可以获取到系统开机至今所经历时间的毫秒数,System.currentTimeMillis()方法可以获取到1970年1月1日0点至今所经历时间的毫秒数第二个参数是依赖于第一个参数而传入的一个时间差值。(需要和第一个参数配合使用)第三个参数就不再说了。

android定时器alarmmanager和timer的区别

Java的Timer类可以用来计划需要循环执行的任务。简单的说,一个Timer内部封装装了“一个Thread”和“一个TimerTask队列”,这个队列按照一定的方式将任务排队处理。封装的Thread在Timer的构造方法调用时被启动,这个Thread的run方法按照条件去循环这个TimerTask队列,然后调用TimerTask的run方法。但是,如果CPU进入了休眠状态,那么这个thread将会因为失去CPU时间片而阻塞,从而造成我们需要的定时任务失效。上述定时任务失效的场景分析:假设定时任务的条件是到了时间xx:yy才能执行,但由于cpu休眠造成线程阻塞的关系,当前系统时间超过了这个时间,即便CPU从终端中恢复了,那么由于条件不满足,定时任务在这一次自然就失效了。它需要用WakeLock让CPU 保持唤醒状态。这样会大量消耗手机电量,大大减短手机待机时间。这种方式不能满足需求。AlarmManager是Android 系统封装的用于管理RTC的模块,RTC(Real Time Clock) 是一个独立的硬件时钟,可以在 CPU 休眠时正常运行,在预设的时间到达时,通过中断唤醒CPU。这意味着,如果我们用 AlarmManager 来定时执行任务,CPU 可以正常的休眠,只有在需要运行任务时醒来一段很短的时间。

android alarmmanager需要权限吗

android 中如果不设置时区,是不需要权限的,有一个例外是: setTimeZone(String timeZone) 设置系统的默认时区。需要android.permission.SET_TIME_ZONE权限AlarmManager是Android中的一种系统级别的提醒服务,它会为我们在特定的时刻广播一个指定的Intent。而使用Intent的时候,我们还需要它执行一个动作,如startActivity,startService,startBroadcast,才能使Intent有用。通常我们使用PendingIntent,它可以理解为对Intent的封装,包含了指定的动作。 Intent intent = new Intent(“pw.msdx.ACTION_SEND“); PendingIntent sendIntent = PendingIntent.getBroadcast(context, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT); AlarmManager am = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE); am.cancel(sendIntent); am.setRepeating(AlarmManager.RTC_WAKEUP, System.currentTimeMillis(), 60 * 10 * 1000, sendIntent);

android alarmmanager如果设置过去的时间就会触发广播

虽然问题已经关闭,但忍不住回复你。明天的时间,怎么会是过去的时间?明明就是未来的时间。你以为今天16点大于明天早上8点?如果是,你就不了解Java的时间标识方法。Java为了存储方便,用long型数据表示1970.1.1凌晨0点0分0秒0毫秒到现在时间。例如1346829956843表示:2012年09月05日 15时25分56秒843毫秒1346891156843表示:2012年09月06日 08时25分56秒843毫秒所以明天的时间绝对是比今天大的。 AlarmManager.set(int type, long triggerAtTime, PendingIntent operation)函数里,triggerAtTime就是上述的long型。

android app被杀死 alarmmanager能不能唤醒

可以唤醒的,但是得需要注意设置进程属性。

在Android中,AlarmManager提供了不受休眠状态的系统定时功能,其一般使用方法如下。

1、创建一个BroadcastReceiver类的子类,接收定时器事件:

public class MyReceiver extends BroadcastReceiver {

......

}

2、在AndroidMenifest.xml中定义上述广播事件接收类的定义:

《receiver android:name=“.MyReceiver“》

《/receiver》

3、在程序中在需要时设置定时器:

Intent intent = new Intent(context,MyReceiver.class);

PendingIntent pendingIntent = PendingIntent.getBroadcast(context, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);

AlarmManager alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);

alarmManager.set(AlarmManager.ELAPSED_REALTIME_WAKEUP , SystemClock.elapsedRealtime() + ms, pendingIntent);

经过ms毫秒之后,MyReceiver会被调用,从而实现定时触发。


声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,谢谢。

上一篇: G6156很少车次吗很难抢到吗?做G6156的高铁在上饶下车,在坐D6268来的急吗

下一篇: 桌面音响品牌(elestion是什么音响)



推荐阅读