android sharedpreferences_android S
Android sharedpreferences
2023-06-13 09:13:40 时间
大家好,又见面了,我是你们的朋友全栈君。
early_suspend / late_resume
LCD显示屏是休眠了,触摸屏也休眠了,但是标准的Linux系统并没有进入休眠
Android在标准的Linux休眠与唤醒机制上又加了一层,就是early_suspend / late_resume
使用early_suspend()进行休眠的设备,它休眠的时刻早于其他设备,使用late_resume()唤醒的设备,它被唤醒的时刻要晚于其他设备。这对函数通常成对出现,当内核打开了CONFIG_EARLY_SUSPEND(Android默认打开)后,就可以使 用这组函数来代替驱动中标准的 suspend / resume接口。
wake_lock的用途只有一个,那就是防止系统进入休眠(这里的休眠,指的是标准的Linux的休眠,不包含使用early_suspend()进行休眠的设备, 使用early_suspend()的设备,在系统还有wake_lock锁的时候,也是要休眠的)
root@android:/ # ls /sys/power/
pm_async
state
wait_for_fb_sleep
wait_for_fb_wake
wake_lock
wake_unlock
wakeup_count
当state 的值变化时,内核会调用
static ssize_t state_store(struct kobject *kobj, struct kobj_attribute *attr,
const char *buf, size_t n)
request_suspend_state(state);//这里,进入了Android的休眠与唤醒的处理函数
if (!old_sleep && new_state != PM_SUSPEND_ON) {
state |= SUSPEND_REQUESTED;
queue_work(suspend_work_queue, &early_suspend_work);//在休眠的时候,去遍历执行early_suspend_work这个队列
} else if (old_sleep && new_state == PM_SUSPEND_ON) {
state &= ~SUSPEND_REQUESTED;
wake_lock(&main_wake_lock);
queue_work(suspend_work_queue, &late_resume_work);//在唤醒的时候,去遍历执行late_resume_work这个队列
}
int pm_suspend(suspend_state_t state)
{
if (state > PM_SUSPEND_ON && state < PM_SUSPEND_MAX)
return enter_state(state);//正如你所料,开始走Linux那套休眠的流程了
return -EINVAL;
}
驱动改动
比如在设备probe的时候做如下操作
struct early_suspend early_suspend;
early_suspend.level = EARLY_SUSPEND_LEVEL_BLANK_SCREEN + 1; //等级,等级大小和suspend顺序一致,和resume顺序相反
early_suspend.suspend = xxx_early_suspend;//指定函数指针,需自己实现
early_suspend.resume = xxx_late_resume;
register_early_suspend(&early_suspend);//注册进核心,也就是加入刚才early_suspend_handlers那个链表
struct wake_lock chrg_lock;
wake_lock_init(&chrg_lock, WAKE_LOCK_SUSPEND, "xxx_wake_lock");//初始化类型为WAKE_LOCK_SUSPEND的wake_lock锁
#ifdef CONFIG_HAS_EARLYSUSPEND
static void xxx_early_suspend(struct early_suspend *h)
{
....
wake_lock(&chrg_lock);
....
}
static void xxx_late_resume(struct early_suspend *h)
{
.....
wake_unlock(&chrg_lock);
....
}
#endif
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/192047.html原文链接:https://javaforall.cn
相关文章
- android中适配器的作用,适配器模式 在Android中的简单理解「建议收藏」
- android sdk manager安装,Android SDK Manager安装过程
- Android下基于Iptables的一种app网络访问控制方案(一)[通俗易懂]
- android短信验证码方案,Android开发之属于你的短信验证码(一)
- Android触摸屏事件派发机制详解与源码分析二(ViewGroup篇)「建议收藏」
- Android修改字体_android设置字体样式
- 【错误记录】Android 应用中启动 FlutterActivity 报错 ( have you declared this activity in your AndroidManifest )
- 【Android 逆向】启动 DEX 字节码中的 Activity 组件 ( DEX 文件准备 | 拷贝资源目录下的文件到内置存储区 | 配置清单文件 | 启动 DEX 文件中的组件 | 执行结果 )
- 【错误记录】编译 Android 版本的 ijkplayer 报错 ( You must define ANDROID_NDK before starting. | 下载指定版本 NDK )
- 【Android Gradle 插件】自定义 Gradle 插件模块 ② ( 在模块中定义插件 | 引入自定义 Gradle 插件模块 | 配置 Gradle 插件上传选项 | 配置分组名称版本号 )
- 【Android Gradle 插件】将自定义 Gradle 插件上传到自建 Maven 仓库 ③ ( 配置上传工件 | 将 Gradle 插件 jar 包、源码、文档上传到本地Maven 仓库 )
- Android控制文字水平间距android:letterSpacing详解手机开发
- android程序崩溃后重启详解手机开发
- android+json+php+mysql实现用户反馈功能方法解析
- android版本检测Android程序的版本检测与更新实现介绍
- android自定义Android菜单背景的代码
- Android笔记之:深入ViewStub的应用
- Android自定义桌面功能代码实现
- android通过gps获取定位的位置数据和gps经纬度
- android开发教程之android的handler使用方法
- android开发教程之自定义属性用法详解