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


相关推荐

  • pycharm更新pip失败_更新pip版本失败

    pycharm更新pip失败_更新pip版本失败在pycharm中创建一个新的虚拟环境,发现pip等级过低,pip-V使用正常的pip升级命令python-mpipinstall–upgradepip报如下错误解决办法easy_install-Upip…

    2022年8月25日
    9
  • 二传感器尺寸「建议收藏」

    二传感器尺寸「建议收藏」说到传感器的尺寸,其实是说感光器件的面积大小,这里就包括了CCD和CMOS。感光器件的面积越大,CCD/CMOS面积越大,捕捉的光子越多,感光性能越好,信噪比越高。下面是家用小DC图像传感器尺寸换算为公制的大小(单位为毫米):2/3英寸的画幅面积为(8.8×6.6mm)1/1.8英寸的画幅面积为(7.178×5.319mm)1/2英寸的画幅面积为(6.4×4.8mm)1/2.7英寸的画幅面…

    2022年6月12日
    48
  • 上delloc 无呼叫 故障排除 笔记[通俗易懂]

    上delloc 无呼叫 故障排除 笔记

    2022年1月17日
    42
  • BSTR LPSTR LPWSTR CString VARIANT COleVariant variant t CC

    BSTR LPSTR LPWSTR CString VARIANT COleVariant variant t CCVisualC++.NET涉及到ATL/ATLServer、MFC和托管C++等多种编程方式,不仅功能强大而且应用广泛。在编程中,我们常常会遇到ANSI、Unicode以及BSTR不同编码类型的字符串转换操作。本文先介绍基本字符串类型,然后说明相关的类,如CComBSTR、_bstr_t、CStringT等,最后讨论它们的转换方法,其中还包括使用最新ATL7.0的转换类和宏,如CA2C…

    2022年7月18日
    16
  • java安装以及配置环境变量详细步骤

    java安装以及配置环境变量详细步骤java安装以及配置环境变量详细步骤一、安装JDK(JavaDevelopmentKit开发工具包)下载地址:http://www.oracle.com/technetwork/java/javase/downloads/index.html选择然后选择然后等待下载安装。下载完成之后开始点击安装(安装的路径尽量不要有中文出现,否则后期可能出现问题)一般安装路径默认就好…

    2022年7月8日
    24
  • 【超详细教程】移植RT-Thread nano,并基于 nano 添加 FinSH/shell

    【超详细教程】移植RT-Thread nano,并基于 nano 添加 FinSH/shell目录背景:移植RT-Threadnano,并基于nano添加FinSH/shell前提及准备工作step1:添加rt-threadnano到裸机工程1.1、NanoPack安装方法一:PackInstaller安装方法二:手动安装1.2、基础工程准备1.3、开始移植rttnano到裸机工程1.4、适配RT-Threadnano1.5…

    2022年5月21日
    90

发表回复

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

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