android sharedpreferences_android S

android sharedpreferences_android Searly_suspend/late_resumeLCD显示屏是休眠了,触摸屏也休眠了,但是标准的Linux系统并没有进入休眠Android在标准的Linux休眠与唤醒机制上又加了一层,就是early_suspend/late_resume使用early_suspend()进行休眠的设备,它休眠的时刻早于其他设备,使用late_resume()唤醒的设备,它被唤醒的时刻要晚…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

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.net/192047.html原文链接:https://javaforall.net

(0)
上一篇 2026年1月20日 上午11:22
下一篇 2026年1月20日 下午12:01


相关推荐

  • 表单提交原理_防止表单重复提交

    表单提交原理_防止表单重复提交1.HTTP是如何提交表单的标签的属性enctype设置以何种编码方式提交表单数据。可选的值有三个:  application/x-www-form-urlencoded:这是默认的编码方式。它只处理表单域里的value属性值,采用这种变法方式的表单会将表单域的值处理成URL方式。  multipart/form-data: 这种编码方式会以二进制流的方式来处理表单数据,这中

    2022年10月6日
    4
  • 一个bug的生命周期是多久_bug严重程度

    一个bug的生命周期是多久_bug严重程度前言:基本定义:BUG从发现到这个bug关闭,是一个完整的生命周期。一:从具体状态上来讲状态有这几种:1:new-bug被第一次发现的时候,确认是一个问题,将bug进行记录。2:assigned-当这个bug被指派给某个开发时,bug的状态变为assigned(已指派)。3:open-在被指派的开发进行bug修复的时候,表示开发正在处理这个bug。4:fixed-当被指派的开发将该bug修复完成的时候,表示bug已修复完成。5:pendingreset-待测试,开发修.

    2022年10月21日
    4
  • FindWindowEx的用法「建议收藏」

    FindWindowEx的用法「建议收藏」FindWindowEx完整定义如下:HWNDFindWindowEx(HWNDhwndParent,//父窗口句柄HWNDhwndChildAfter,//开始的子窗口句柄,这个参数很有用LPCTSTRlpszClass,//类名LPCTSTR

    2022年5月31日
    44
  • Drupal8 入门教程(一)安装部署

    Drupal8 入门教程(一)安装部署&#13; 一、Drupal简介  Drupal是使用PHP语言编写的开源内容管理框架(CMF),它由内容管理系统(CMS)和PHP开发框架(Framework)共同构成。连续多年荣获全球最佳CMS大奖,是基于PHP语言最著名的WEB应用程序。截止2011年底,共有13,802位WEB专家参加了Drupal的开发工作;228个国家使用181种语言的729,791位网站设计…

    2022年6月10日
    39
  • 华为论坛官网_华为设备官网

    华为论坛官网_华为设备官网今日看点✦华为将持续投入汽车行业,今年研发投资将达10亿美元✦绿地集团旗下绿地数科拟2023年前上市,利润达到60亿元✦瑞幸首家咖啡烘焙基地正式投产,总投资2.1亿元✦海南离岛免税…

    2022年10月5日
    5
  • AWS发布Agent插件实现云部署自动化

    AWS发布Agent插件实现云部署自动化

    2026年3月14日
    2

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号