539
查看Android中的闹钟与RTC的源代码
Android中的闹钟与RTC
0
←
Android中的闹钟与RTC
跳转至:
导航
、
搜索
因为以下原因,你没有权限编辑本页:
你被禁止执行你刚才请求的操作。
您可以查看并复制此页面的源代码:
这里以MSM8916为例,大概介绍一下 Android中 RTC的实现模式。 我们知道,RTC的主要功能就是保证系统睡眠、甚至掉电的情况下,时钟的准确性,同时提供定时唤醒系统、甚至定时开机的功能。 先来看一下 android中的闹钟。 android的闹钟分为以下三种类型:RTC , RTC_WAKEUP 和 RTC_POWEROFF_WAKEUP,其他的实质都是这三者中的一种: *RTC :只在机器唤醒时计时,进入睡眠后就暂停 *RTC_WAKEUP :具备唤醒机器特性,即闹钟时间到后,即使机器处于睡眠状态,也会把机器唤醒以执行任务 *RTC_POWEROFF_WAKEUP :除了具备 RTC_WAKEUP的特性外,还具备自动开机功能,即闹钟时间超时后,如果机器处于关机状态,就会把机器自动开机来执行任务 App设置一个闹钟时: <pre class="prettyprint"> alarmManager.set(AlarmManager.RTC_WAKEUP, System.currentTimeMillis()+120000, chkPenIntent); </pre> 将调用 AlarmManagerService.set ==> AlarmManagerService.setImplLocked ==> AlarmManagerService.rescheduleKernelAlarmsLocked ==> AlarmManagerService.setLocked *从 rescheduleKernelAlarmsLocked可以发现 AlarmManagerService并不是直接将 App设置的alarm传下去,而是在这里进行了预处理,只把最先触发的 alarm分类传到了 jni中 进入jni: <pre class="prettyprint"> static void android_server_AlarmManagerService_set(JNIEnv* env, jobject obj, jint fd, jint type, jlong seconds, jlong nanoseconds) { struct timespec ts; ts.tv_sec = seconds; ts.tv_nsec = nanoseconds; int result = ioctl(fd, ANDROID_ALARM_SET(type), &ts); if (result < 0) { ALOGE("Unable to set alarm to %lld.%09lld: %s\n", seconds, nanoseconds, strerror(errno)); } } </pre> fd在 jni init中被初始化: <pre class="prettyprint"> static jint android_server_AlarmManagerService_init(JNIEnv* env, jobject obj) { return open("/dev/alarm", O_RDWR); } </pre> 接下来,看一下 /dev/alarm这个驱动
返回
Android中的闹钟与RTC
。
导航菜单
个人工具
   
个人维基
注册
登录
名字空间
页面
变换
查看
阅读
查看源代码
统计
查看历史
操作
搜索
导航
首页
Ubuntu
Android
C&CPP
Java
Python
大杂烩
最近更改
工具箱
所有页面
文件列表
特殊页面