一看到这个需求就想到了使用 AlarmManager 来实现。 AlarmManager 经常被用来执行定时任务,比如设置闹铃、发送心跳包等。...这个使用如果使用 Timer 来执行定时任务就会失败,因为 Timer 无法唤醒 CPU 。 所以,综上所述,AlarmManager 就成为了最佳选择。...} private BroadcastReceiver alarmReceiver = new BroadcastReceiver() { @Override public void...SDK API >= 23 在 Android 4.4 上品尝到胜利的甜头后,你顺便在 Android 6.0 的设备上测试了一下。结果。。。。。。你又 TMD 傻眼了!...(), TIME_INTERVAL, pendingIntent); } private BroadcastReceiver alarmReceiver = new BroadcastReceiver
标题图 女孩:BroadcastReceiver是什么呀?...对于普通广播,在Android中使用Context.sendBroadcast()方法来发送。...BroadcastReceiver的实现: 到头来还是要了解BroadcastReceiver的实现,接下来我列出主要的内容目录,对于广播接收器是我们要掌握的,是Android中重要的四大组件之一。...ok使用本地广播: 什么又是本地广播呢?...你会问道,本地广播是Android引入的一套机制,为本地广播机制,使用本地广播机制,有很多优点: 不用但系机密数据被泄漏; 不用担心安全漏洞的隐患; 更加高效。
文章目录 一、AlarmManager 简介 二、使用 AlarmManager 保持 CPU 唤醒流程 ( 省电操作 ) 三、使用 WeakLock 保持 CPU 唤醒 代码示例 1、Service...WeakLock 保持服务唤醒 | 屏幕唤醒 ) 中 , 使用 WeakLock 保持 CPU 唤醒 , 全程 CPU 都处于工作状态 , 该操作耗电量非常大 ; AlarmManager 可以一定程度上替代上述..., 然后继续休眠 , 可以极大降低资源消耗 ; 二、使用 AlarmManager 保持 CPU 唤醒流程 ( 省电操作 ) ---- 使用 AlarmManager 保持 CPU 处于唤醒状态 ,...比使用 WeakLock 更省电 ; 使用 AlarmManager 保持 CPU 唤醒流程 : ① 创建自定义广播接收者 : 这里为了简单 , 在 Service 中简单创建一个广播接收者 , 处理...ACTION 事件 ; private BroadcastReceiver receiver = new BroadcastReceiver() { @Override
提醒完毕可以再重新设置一次 public class AlarmReceiver extends BroadcastReceiver { private AlarmManager alarmManager...提醒完毕可以再重新设置一次 */ private void alarm(Context context, Intent intent) { alarmManager =...(AlarmManager) context .getSystemService(Context.ALARM_SERVICE); long triggerAtTime...(AlarmManager.RTC_WAKEUP, triggerAtTime, interval, operation); } } 2.手机重启之后,设置的闹钟是否还有效...监听开机启动(这项功能最好在虚拟机里测试,我的华为手机貌似把这项功能给屏蔽了) public class BootCompleteReceiver extends BroadcastReceiver {
return false; [*]} [*] 很多人开发的程序后台都会一个service不停的去服务器上更新数据,在不更新数据的时候就让它sleep,这种方式是非常耗电的,通常情况下,我们可以使用...AlarmManager来定时启动服务。...AlarmManager am = (AlarmManager) [*] context.getSystemService(Context.ALARM_SERVICE); [*]...,firstWake, interval, pendingIntent); [*] 最后一招,在运行你的程序前先检查电量,电量太低,那么就提示用户充电之类的,使用方法: [*]public void...mReceiver = new BroadcastReceiver() { [*] public void onReceive(Context context, Intent intent)
//获取系统闹钟 AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE); Intent intent =...public static class MyReceiver extends BroadcastReceiver { @Override public void onReceive...使用timer类。...//TODO ... } },new Date(),5000); 终止timer timer.cancel(); 以上三种定时任务除了第一种不要随便使用外...,推荐使用第三种和第二种。
调度重复的闹钟 闹钟(基于AlarmManager类)给予你一种在应用使用期之外执行与时间相关的操作的方法。你可以使用闹钟初始化一个长时间的操作,例如每天开启一次后台服务,下载当日的天气预报。...闹钟具有如下特性: 允许你通过预设时间或者设定某个时间间隔,来触发Intent; 你可以将它与BroadcastReceiver相结合,来启动服务并执行其他操作; 可在应用范围之外执行,所以你可以在你的应用没有运行或设备处于睡眠状态的情况下...Note:对于那些需要确保在应用使用期之内发生的定时操作,可以使用闹钟替代使用Handler结合Timer与Thread的方法。因为它可以让Android系统更好地统筹系统资源。...* 1, alarmIntent); } } 广播: package com.example.alarmtest; import android.content.BroadcastReceiver...android.content.Intent; import android.content.pm.PackageManager; public class SampleBootReceiver extends BroadcastReceiver
alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE); if (Build.VERSION.SDK_INT...>= Build.VERSION_CODES.KITKAT) { //KITKAT 19 OR ABOVE alarmManager.setExact(AlarmManager.RTC_WAKEUP... 广播的写法 import android.content.BroadcastReceiver...import com.util.NotificationUtil; import java.io.IOException; public class AlarmReceiver extends BroadcastReceiver...action android:name="TIMER_ACTION" /> ---- 由于查看的资料太多了,所以就不一一列举了,然后提供一个测试方法
44.259 6644-6644/cn.codingblock.androidadvancestudy I/MyBroadcastReceiver: 接收到广播消息:我是一个普通广播 普通广播的接收顺序测试...如果我们想在本应用发出的广播只在此应用内可以收到,那么可以使用本地广播了。...本地广播由 LocalBroadcastManager 管理,是在 API 21 以后添加的,使用起来也很方便,需要先通过 LocalBroadcastManager.getInstance() 方法获取其单例...使用本地广播时,无需在AndroidMainfest.xml中注册,必须使用 LocalBroadcastManager.getInstance(...).registerReceiver(..)来注册接收器...15019-15019/cn.codingblock.androidadvancestudy I/MyBroadcast2Receiver: 接收到广播消息:我是一个本地广播 四、sticky广播(不建议使用
alarmManager.set(AlarmManager.RTC_WAKEUP, c.getTimeInMillis(), pi); //设置闹钟,当前时间就唤醒...判断表是否存在出现异常", "log.txt"); } return result; } 2、列表的展示选择使用适配器...,以上代码使用第一种方法: SimpleAdapter adapter = new SimpleAdapter(getApplicationContext(), getClockList...android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import...android.media.AudioManager; import android.os.Vibrator; import android.util.Log; public class AlarmReceiver extends BroadcastReceiver
AlarmManager AlarmManager是Android提供的一个全局定时器,其使用范围要大于Timer方式。...: 表示定时器即使在睡眠状态下也会启用,此时定时器使用相对时间(相对于系统启动开始) ELAPSED_REALTIME : 表示定时器在睡眠状态下不可用,此时定时器使用相对时间 因为AlarmManager...,不能使用LocalBroadcastManager来注册; PendingIntent AlarmManager启动方法中的定时任务使用了PendingIntent类,PendingIntent...android.app.PendingIntent; import android.content.BroadcastReceiver; import android.content.Context;...mCount = 0; private AlarmReceiver alarmReceiver = null; public class AlarmReceiver extends BroadcastReceiver
定时器AlarmManager常常用于需要周期性处理的场合,比如闹钟提醒、任务轮询等等。...针对定时器AlarmManager的滥用问题,Android从4.4开始,修改了setRepeating方法的运行规则。...下面是将setRepeating方法改为使用set方法实现的代码例子: private String ALARM_EVENT = "com.example.performance.alarm"...()+mDelay, pIntent); } // 定义一个定时广播的接收器 public static class AlarmReceiver extends BroadcastReceiver... System.currentTimeMillis()+mDelay, pIntent); } 其实就是判断当前系统版本,对于Android6.0及以上版本,使用
PendingIntent.getBroadcast(context, 0, sentIntent, 0); //注册发送信息的广播接收者 context.registerReceiver(new BroadcastReceiver...deliverPI = PendingIntent.getBroadcast(context, 0,deliverIntent, 0); context.registerReceiver(new BroadcastReceiver...示例 简单的示例:使用Mediaplayer播放音乐,通过AudioManager调节音量大小与静音! 对了,先在res下创建一个raw的文件夹,往里面丢一个MP3资源文件!...另外,这里用set方法可能有点不准,如果要 更精确的话可以使用setExtra()方法来设置AlarmManager!...alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE); 获得系统提供的AlarmManager服务的对象 Intent设置要启动的组件
Intent.FLAG_INCLUDE_STOPPED_PACKAGES); this.sendBroadcast(intent); 应用2的代码实现: public class KeepLiveReceiver extends BroadcastReceiver...2.7 AlarmManager唤醒 思路:通过AlarmManager设置一个定时器,定时的唤醒服务 **保活强度:**killBackgroundProcess下,大部分情况work, ...系统服务 AlarmManager alarmManager = (AlarmManager)context.getSystemService(Context.ALARM_SERVICE); ... alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, System.currentTimeMillis(), timeMillis,pendingIntent...中的显示: 最后,控制 Activity 为透明: Activity 启动与销毁时机的控制: public class KeepLiveReceiver extends BroadcastReceiver
Using the AlarmManager to Schedule Tasks at the System Level....The AlarmManager provides access to system-level alarm services....register the RECEIVE_BOOT_COMPLETE permission in their Android Manifest and reschedule their alarms in a BroadcastReceiver...Alarm clock or reminder applications are great examples for AlarmManager usage....AlarmManager and GCM Network Manager are the only options for interrupting a Doze.
在事件响应和状态切换方面,依靠其内部BroadcastReceiver类成员和两个listener实现驱动。 ? DeviceIdleController通过响应内外部事件完成状态驱动。...内部定义的状态切换事件ACTION_STEP_IDLE_STATE由AlarmManager类成员根据预设时间触发,mReceiver接收到事件后调用stepIdleStateLocked()完成状态切换...在子线程中测试下面简单的连接请求,发现子线程在openConnection后一直被挂起。 ? 换下面的网络连接检查代码: ?...经过测试在doze模式下,即使接收到了GCM推送后,应用再发起网络连接的结果和上面的网络测试一样,仍旧是被禁止的!Google决心强推所有的消息接收都只能依靠GCM推送!?只能说持续跟进+拭目以待。...[注]使用Release 2测试结果和1一致,Google方面确认此处存在bug导致应用无法加到临时白名单中,此问题已在修复中。 主动退出doze 最后探讨下应用如何“悄悄”地使系统退出doze模式。
= (AlarmManager) getContext().getSystemService( Context.ALARM_SERVICE); } @...adapter.add(new AlarmData(c.getTimeInMillis())); saveAlarmList(); // 使用...adapter.add(new AlarmData(Long.parseLong(string))); } } } } 里面还有一个BroadcastReceiver...需要注册 package com.example.clock.tool; import android.content.BroadcastReceiver; import android.content.Context...; import android.content.Intent; import android.widget.Toast; public class AlarmReceiver extends BroadcastReceiver
new Thread(new Runnable() { @Override public void run() { updateWeather(); stopSelf(); } }).start(); AlarmManager...manager = (AlarmManager) getSystemService(ALARM_SERVICE); int anHour = 8 * 60 * 60 * 1000; // 这是8小时的毫秒数...lxj1137800599/article/details/50358765 和http://blog.csdn.net/lxj1137800599/article/details/50495046 6.BroadcastReceiver...的使用 public class AutoUpdateReceiver extends BroadcastReceiver { @Override public void onReceive(Context...第二个泛型参数指定为Integer,表示使用整型数据来作为进度显示单位。 第三个泛型参数指定为Boolean,则表示使用布尔型数据来反馈执行结果。
简介 几乎每个安卓应用都无可避免的使用到广播。例如监听WIFI的开启状态、时间的获取,甚至是我们最常用的闹钟功能,都是结合着AlarmManager与广播来实现的。...具体解析 再看这张图, 我将从左到右对每个重要图像进行解释: mReceivers: 维护在App中的一个列表,用户存储BroadcastReceiver与ReceiverDispatcher之间的对应关系...,同一个BroadcastReceiver对应的Binder Stub将不会被反复创建 InnerReceiver: 实现在App中的Binder”服务端”,它的父类是Binder Stub,当广播在AMS...binder call到客户端,以在App端触发广播的onReceive方法 mRegisteredReceivers: 动态广播注册的核心对象,是一个HashMap,这个Map以IBinder为键,每个BroadcastReceiver...方法;静态广播的派发是从ResolverInfo对象中取出processName, 再取出ProcessRecord, 最后在LoadedApk中调用了BroadcastReceiver.onReceive
领取专属 10元无门槛券
手把手带您无忧上云