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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • linux下移动文件命令_linux怎么移动文件

    linux下移动文件命令_linux怎么移动文件linux中移动文件在Linux中移动文件看似比较简单,但是可用的选项却比大多数人想象的要多。本文向初学者讲授如何在GUI和命令行中移动文件,同时还解释了幕后实际发生的情况,并介绍了许多经验丰富的用户很少探索的命令行选项。搬什么?在研究移动文件之前,值得仔细研究一下移动文件系统对象时实际发生的情况。创建文件后,会将其分配给一个inode,它是用于数据存储的文件系统中的固定点…

    2022年9月27日
    5
  • Mybatis事务隔离级别「建议收藏」

    Mybatis事务隔离级别「建议收藏」转载:https://blog.csdn.net/qq924862077/article/details/52599961一般数据库的隔离级别有4个,由低到高依次为Readuncommitted、Readcommitted、Repeatableread、Serializable,这四个级别可以逐个解决脏读、不可重复读、幻读这几类问题。√:可能出现    ×:不会出现脏读不可重复读幻读说明…

    2022年10月14日
    2
  • grub修复系统引导_grub无法引导windows

    grub修复系统引导_grub无法引导windowshttp://blog.chinaunix.net/u/24866/showart_2118188.html这是原创地址,写的也很详细~ 转载于:https://blog.51cto.com/1866045/364779

    2022年8月12日
    4
  • 云服务器怎么配置cpu与内存搭配「建议收藏」

    云服务器怎么配置cpu与内存搭配「建议收藏」很多朋友在购买云服务器之前都会搜服务器一般用几核才够用,因为服务器现在配置很多。低到1核2G、2核4G。高到16核32G、32核64G。甚至某些云服务器可以做到256核5120G这种神奇配置。那么购买云服务器时如何选择cpu与内存搭配?出现资源不足时应如何排查原因呢?一、处理器性能解析首先要明确一点,虽然都是多少核。但是服务器的处理器性能还是有差异的。具体可以搜对应处理器CPU性能天梯。阿里云的服务器都是定制…

    2022年5月22日
    408
  • “数加”斩获2017软博会金奖

    “数加”斩获2017软博会金奖

    2022年3月4日
    46
  • 软件测试经典面试题(小题汇总)[通俗易懂]

    整理收集一些大家的题,自己来作答,回答不妥或者不全的还请大家指正网络(一)简单描述下TCP协议TCP:传输控制协议,是传输层通信协议。它有面向连接、可靠、字节流传输等特点TCP建立连接时,需要三次握手协议TCP三次握手的过程如下:客户端发送SYN保温给服务端,进入SYN_SEND(SEQ=X)状态服务端收到SYN保温,回应一个SYN(SEQ=Y)ACK(ACK=X+1)报文,进入…

    2022年4月13日
    35

发表回复

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

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