我的编程空间,编程开发者的网络收藏夹
学习永远不晚

如何让Android系统不休眠

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

如何让Android系统不休眠

这篇文章主要为大家展示了“如何让Android系统不休眠”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“如何让Android系统不休眠”这篇文章吧。

Wake Lock是一种锁的机制, 只要有人拿着这个锁,系统就无法进入休眠,

可以被用户态程序和内核获得. 这个锁可以是有超时的或者是没有超时的,

超时的锁会在时间过去以后自动解锁. 如果没有锁了或者超时了, 内核就

会启动休眠的那套机制来进入休眠.

1.内核维护了两个链表

1).链表,active_wake_locks[WAKE_LOCK_TYPE_COUNT]

   active_wake_locks[0]维护的是suspend lock.

   active_wake_locks[1]维护的是idle lock.

2).链表,inactive_locks来记录所有处于inactive状态的锁.

 2. 应用申请锁流程

 比如/sys/power/wake_lock 下面的PowerManagerService的生成过程。

1). PowerManager类

Android 提供了现成 android.os.PowerManager 类 ,类中提供 newWakeLock(int flags, String tag)方法来取得相应层次的锁, 此函数的定义 frameworks/base/core/java/android/os/PowerManager.java下面,应用程序在申请wake_lock时都会有调用。

 实例:

PowerManager pm = (PowerManager)getSystemService(Context.POWER_SERVICE);

PowerManager.WakeLock wl = pm.newWakeLock

          (PowerManager.SCREEN_DIM_WAKE_LOCK, “My Tag”);

 wl.acquire();//申请锁这个里面会调用PowerManagerService里面acquireWakeLock()

wl.release(); //释放锁,显示的释放,如果申请的锁不在此释放系统就不会进入休眠。

2). frameworks层

/frameworks/base/services/java/com/android/server/

 PowerManagerService.java这个类是来管理所有的应用程序申请的wakelock。比如音视频播放器,camera等申请的wakelock都是通过这个类来管理的。static final String PARTIAL_NAME = "PowerManagerService"Power.acquireWakeLock(Power.PARTIAL_WAKE_LOCK,PARTIAL_NAME);这个函数调用Power类里面的acquireWakeLock(),此时的PARTIAL_NAME作为参数传递到底层去。 

/frameworks/base/core/java/android/os/Power.java

public static native void acquireWakeLock(int lock, String id);

注:native申明的方法在Power类中没有实现,其实现体在frameworks/base/core/jni/android_os_Power.cpp中,所以调用Power类的acquireWakeLock()方法时会调用JNI下的实现方法

 3).JNI层的实现

路径:frameworks/base/core/jni/android_os_Power.cpp 

static void acquireWakeLock(JNIEnv *env, jobject clazz, jint lock, jstring idObj)

  {

      const char *id = env->GetStringUTFChars(idObj, NULL);

      acquire_wake_lock(lock, id);

      env->ReleaseStringUTFChars(idObj, id);

  }

注:在acquireWakeLock()中调用了路径下hardware/libhardware_legacy/power/power.c下面 的acquire_wake_lock(lock, id)

4).与kernel层的交互

在power.c下的acquire_wake_lock(lock, id)函数如下:

 int acquire_wake_lock(int lock, const char* id)

 {  

     return write(fd, id, strlen(id));

 }

注: fd就是文件描述符,在此表示”/sys/power/wake_lock” id就是从PowerManagerService类中传下来的参数即: PARTIAL_NAME = "PowerManagerService"到此就是通过文件系统来与kernel层交互的地方

3、示例

不让android进入休眠可以在kernel里加上三行代码。一直保管着这个锁。系统就不会进入休眠。如下:


static struct wake_lock wqf_charge_display_lock; //声明一个锁
wake_lock_init(&wqf_charge_display_lock, WAKE_LOCK_SUSPEND, "wqf_charge_display_lock"); //wqf charge_display_lock 初始化这个锁
wake_lock(&wqf_charge_display_lock);//wqf modify 保管这个锁、这样系统就不会进入休眠


以上是“如何让Android系统不休眠”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注编程网行业资讯频道!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

如何让Android系统不休眠

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

如何让Android系统不休眠

这篇文章主要为大家展示了“如何让Android系统不休眠”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“如何让Android系统不休眠”这篇文章吧。Wake Lock是一种锁的机制, 只要有人拿着
2023-06-03

win8系统让如何关闭系统休眠功能(图文)

win+X(窗口键+X)在弹出菜单选择 电源选项在弹出的窗口 选择更改计算机睡眠时间在弹出的窗口 点击 使计算机进入睡眠状态 的下拉框 然后选择从不 然后点击保存修改关闭窗口 至此win8下关闭休眠功能的教程结束
2022-06-04

Win8.1怎么关闭休眠让系统不待机

我们知道,电脑开机后,如果一段时间没有操作电脑的话,电脑会自动进入睡眠待机状态。但有时候,夜间去睡觉,开着电脑挂游戏或下载电影的时候,是不希望电脑进入待机状态,因为一旦电脑进行睡眠,意味着当前运行的软php件也将暂停。 不想让电脑待机,不知
2023-06-05

Android系统永不锁屏永不休眠的方法

开发Android程序时,有时候在程序运行的时候,不能让系统休眠,否则有一些运行会停止,因此我们需要设置禁止休眠,有两种方式: 一种是添加权限, 一种是代码中设置, 建议使用第一种方式,这
2022-06-06

Win10系统中更改休眠时间让休眠时间符合使用习惯

休眠状况是电脑使用中常见的一种状态,休眠状态既可以使电脑处于无操作的状态,又避免了关机之后还要重新开机的麻烦,对于离开一会不使用电脑,将电脑设置成休眠状态是最好的。Win10系统中设置休眠时间的操作方法:在win10桌面的空白处点击右键,选
2023-06-10

设置Android系统永不锁屏永不休眠的方法

在进行Android系统开发的时候,有些特定的情况需要设置系统永不锁屏,永不休眠。本篇文章给大家介绍Android 永不锁屏,开机不锁屏,删除设置中休眠时间选项,需要的朋友一起学习吧。 Android 6.0.1 Create:2016-0
2022-06-06

linux系统怎么设置永不休眠

在Linux系统中,可以通过以下方法设置永不休眠:1. 使用命令行方式:打开终端,输入以下命令:```sudo systemctl mask sleep.target suspend.target hibernate.target hybr
2023-09-05

如何清除Vista系统休眠文件

这期内容当中小编将会给大家带来有关如何清除Vista系统休眠文件,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。我使用的是windows vista系统,当时给C盘分了10GB,使用几个月后,现在系统总是提
2023-06-14

linux如何设置不休眠

要设置Linux不休眠,可以使用以下方法:1. 命令行方式:打开终端,输入以下命令来禁用休眠功能:```sudo systemctl mask sleep.target suspend.target hibernate.target hyb
2023-09-28

win10如何设置不休眠

要设置Windows 10不休眠,可以按照以下步骤操作:1. 打开“控制面板”,可以在“开始”菜单中搜索并打开。2. 在“控制面板”中,选择“硬件和声音”。3. 在“硬件和声音”中,选择“电源选项”。4. 在“电源选项”中,选择当前使用的电
2023-09-08

解决windows7系统不支持休眠(把休眠找回来)的方法

最近使用Win7时一直找不到“休眠”按钮。搜索了一番Windows自带的帮助,尽是一些废话,最android后还是拿起google找到了答案。趁此记录下,分享给其它人。 消失的“休眠” 如下图
2023-05-30

Win7系统屏幕休眠时间如何调

您可以按照以下步骤调整Win7系统屏幕休眠时间:1. 点击桌面右下角的电源图标。2. 点击“更改电源设置”。3. 在“选择或自定义要更改的计划”中,选择您当前正在使用的计划,一般为“平衡”。4. 点击“更改计划设置”。5. 在“更改高级电源
2023-08-22

ubuntu系统怎么设置永不休眠

要在Ubuntu系统上设置永不休眠,可以按照以下步骤进行操作:1. 打开"系统设置",可以在应用程序菜单中找到,也可以使用快捷键"Super键"+"S"搜索并打开。2. 在"系统设置"中,点击"电源"选项。3. 在"电源"选项中,找到"关闭
2023-08-31

win7系统设置显示器常亮不休眠如何关闭

  win7系统设置显示器常亮不休眠如何关闭?当我们将电脑设置了休眠之后,在规定的时候后就会自动休眠,需要使用的时候需要重新唤醒。有的用户觉得唤醒时比较麻烦,想要设置为常亮模式,那么怎么去进行切换,很多小伙伴不知道怎么详细操作,小编下面整理
2023-07-24

Win8电源选项中没有休眠这一项如何让Win8也能够休眠

我们都知道,Win8默认的电源选项中是没有休眠这一选项的,即编程客栈使用Alt+F4打开关闭Windows选项窗口也看不到”休眠“。难道Win8就不能够休眠了吗?答案当然不是,我们只要进行一些设置就能让Win8也能够
2023-06-06

如何关闭Win8.1系统休眠功能?关闭Win8.1占空间的系统休眠功能方法介绍

休眠功能是Windows系统提供的一项较为贴心的功能,系统主要就是将内存中的所有数据保存到一个休眠文件中,这个休眠文件也就是增加的休眠数据几乎等同于电脑的全部内存容量。  对于不少普通用户来说很少会用到系统的休眠功能,比如在家里使http:
2023-06-05

win7系统如何修改电脑休眠时间

这篇文章主要为大家展示了“win7系统如何修改电脑休眠时间”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“win7系统如何修改电脑休眠时间”这篇文章吧。1.使用鼠标单击桌面上的“开始”按钮,选择“
2023-06-28

android深度休眠模式如何实现

Android的深度休眠模式一般是通过以下步骤实现的:1. 进入待机模式:首先,将设备置于待机模式,这可以通过按下电源键或设置中的待机选项来完成。2. 进入深度休眠模式:一旦设备进入待机模式,系统会根据设备的设置和使用情况决定是否进入深度休
2023-10-20

windows系统怎样为普通的键盘设计一个休眠快捷方式让电脑快速休眠

今天就跟大家聊聊有关windows系统怎样为普通的键盘设计一个休眠快捷方式让电脑快速休眠,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。大家都知道电脑关机可以选择关机和休眠,其中休眠可
2023-06-13

让Win7系统在休眠状态离线下载的小技巧

不少的朋友会有在网上下载电影或者大型文件的情况,通常下载都要很长时间,在这个过程中如果我们没有对系统进行任何操作的话,那么系统就会进入休眠状态,那么我们的下载就会自动终止了,那么有没有什么办法让电脑在我们没有进行任何操作的时候在休眠
2023-06-07

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录