前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >【Android 电量优化】电量优化 ( 唤醒锁定 | 使用 WeakLock 保持服务唤醒 | 屏幕唤醒 )

【Android 电量优化】电量优化 ( 唤醒锁定 | 使用 WeakLock 保持服务唤醒 | 屏幕唤醒 )

作者头像
韩曙亮
发布于 2023-03-28 07:02:43
发布于 2023-03-28 07:02:43
1.4K00
代码可运行
举报
运行总次数:0
代码可运行

文章目录

参考 Google 官方文档 :

一、使用 WeakLock 保持 CPU 唤醒 ( 费电操作 )


1、保持 CPU 唤醒

1 . Android 设备休眠次序 : Android 设备长时间不使用时 , ① 屏幕先变暗 , ② 然后屏幕关闭 , ③ 最后关闭 CPU ;

2 . CPU 唤醒状态 : 如果 CPU 被关闭了 , 那么 Service 服务 , 肯定无法运行了 , 这里需要让 CPU 保持唤醒状态 ;

3 . Service 服务后台运行 : 后台 Service 服务运行时 , 需要 CPU 唤醒 , 维持后台服务运行 ;

2、使用 WeakLock 保持 CPU 唤醒流程

使用 WeakLock 保持 CPU 唤醒流程 :

① 获取 PowerManager 服务 : 跨进程获取 PowerManager 服务 ;

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
PowerManager powerManager = (PowerManager) getSystemService(POWER_SERVICE);

② 判断是否支持 CPU 唤醒 : 调用 PowerManager 对象的 isWakeLockLevelSupported 方法 , 获取该设备是否支持 CPU 唤醒操作 ;

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
powerManager.isWakeLockLevelSupported(PowerManager.PARTIAL_WAKE_LOCK)

③ 创建 PowerManager.WakeLock : 调用 PowerManager 对象 的 newWakeLock 方法 , 创建唤醒锁 ;

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
mWakeLock = powerManager.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "WAKE_LOCK");

④ 开启唤醒 CPU 操作 : 调用 PowerManager.WakeLock 对象的 acquire 开始唤醒 CPU 操作 ;

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
mWakeLock.acquire();

⑤ 结束唤醒 CPU 操作 : 不需要 CPU 唤醒时 , 及时释放唤醒锁 ;

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
mWakeLock.release();

3、使用 WeakLock 保持 CPU 唤醒代码示例

1 . 在 AndroidManifest.xml 中设置权限 : 删除了大部分配置 , 只保留必要配置 ;

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="kim.hsl.bp">
    <uses-permission android:name="android.permission.WAKE_LOCK" />

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

        <!-- WeakLock 保持 CPU 唤醒的 Service 服务 -->
        <service
            android:name=".WeakLockService"
            android:process=":weaklock" />

    </application>

</manifest>

2 . 服务 Service 保持 CPU 唤醒代码示例 :

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
package kim.hsl.bp;

import android.annotation.SuppressLint;
import android.app.Service;
import android.content.Intent;
import android.os.Build;
import android.os.IBinder;
import android.os.PowerManager;

import androidx.annotation.Nullable;
import androidx.annotation.RequiresApi;

public class WeakLockService extends Service {
    public static final String TAG = "WeakLockService";

    /**
     * 唤醒锁定 服务
     */
    private PowerManager.WakeLock mWakeLock;

    @Nullable
    @Override
    public IBinder onBind(Intent intent) {
        return null;
    }

    @SuppressLint("InvalidWakeLockTag")
    @RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)
    @Override
    public void onCreate() {
        super.onCreate();
        // 跨进程获取 PowerManager 服务
        PowerManager powerManager = (PowerManager) getSystemService(POWER_SERVICE);

        // 判断是否支持 CPU 唤醒
        boolean isWakeLockLevelSupported = powerManager.
        		isWakeLockLevelSupported(PowerManager.PARTIAL_WAKE_LOCK);

        // 支持 CPU 唤醒 , 才保持唤醒
        if(isWakeLockLevelSupported){
            // 创建只唤醒 CPU 的唤醒锁
            mWakeLock = powerManager.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "WAKE_LOCK");

            // 开始唤醒 CPU
            mWakeLock.acquire();
        }


    }
    
    @Override
    public void onDestroy() {
        super.onDestroy();
        // 释放 CPU 唤醒锁
        if(mWakeLock != null){
            mWakeLock.release();
        }
    }
}

二、屏幕唤醒


屏幕唤醒操作 :

① 代码中设置 : 在 Activity 中为 Window 添加 WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON 标识 ;

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
package kim.hsl.bp;

import android.os.Bundle;
import android.view.WindowManager;

import androidx.appcompat.app.AppCompatActivity;

public class MainActivity extends AppCompatActivity {
    public static final String TAG = "MainActivity";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
    }
}

② 配置文件设置 : 在布局的根标签中设置 android:keepScreenOn=“true” 属性 ;

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:keepScreenOn="true"
    tools:context=".MainActivity">
    
</androidx.constraintlayout.widget.ConstraintLayout>

上述配置不需要特殊权限 , 不需要维护资源的申请释放 ;

三、源码及资源下载


源码及资源下载地址 :

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020-07-06,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
关于WordPress中字体加载慢的问题解决方案
最近发现Wordpress有时候加载的特别慢,于是就想办法找了下原因。之前听网上说是因为wordpress用的是Google的字体库,而且是每次都要加载,导致访问慢的,于是当时装了个Disable Google Fonts的插件,禁用了Google字体,然后装了一个Useso take over Google插件,将字体文件改为360托管的字体库,这样就可以访问快点了。当时的效果的确挺好的,结果最近在使用的时候又发现网站访问慢了,用Chrome查了下资源加载的情况,发现访问useso的字体库的时间特别的长。这时候改用Google字体的时候反而更快了。。。这就十分令人惆怅了,有时候用useso的快,有时候用google的快,真的挺麻烦的。后来想想干脆把这个文件下到服务器上不就好了么。。。于是就倒腾出了下面的办法,将当前主题的字体文件下载到了服务器上。
mythsman
2022/11/14
1K0
Google Fonts导致WordPress 速度问题的三个解决方案
本来实在是不想写这个的,因为相关方法在圈子里面已经烂大街了。但无奈,一些客户将近期的Google Fonts导致 WordPress 打开速度慢的现象归咎于我的主题——真TM 比窦娥还冤。所以,有必要在这里说下。 2015.2.26更新:Google Fonts 已可正常访问,相关插件可卸,本文已失效 Google Fonts导致WordPress 速度问题之原因 WordPress 自3.8+版本后加入了Google Fonts(别问我Google Fonts是什么了),然后捏,因为近期敏感周期(35号)
Jeff
2018/01/19
2.3K0
提高WordPress网站的打开速度
就是把调用的谷歌的文件链接换成国内的链接。在你的后台主题编辑中,在所有的文件中Ctrl+F搜索关键字“google”,如果搜到相关谷歌的链接诸如fonts.googleapis.com大家可以把这个文件(可能下载需要翻墙具体我没试过)下载下来放到自己网站里完了更换成自己网站的文件链接就可以。
Inkedus
2020/04/16
2K0
DW Replace Open Sans:将WordPress 后台中的open-sans字体加载源从Google Fonts换为360 CDN
针对最近因为Google fonts被墙导致WordPress 打开慢的问题,Jeff 在上一篇《Google Fonts导致WordPress 速度问题的三个解决方案》提出的方案中其中是禁止加载Google fonts ,但是禁止后WordPress 后台的英文字体会变成你当前系统默认的——不好看。为此Jeff 借助网络上的代码开发了这款插件,可一键将WordPress 后台中的open-sans字体加载源从Google Fonts替换为360的CDN 加载源。 2015.2.26更新:Google
Jeff
2018/01/19
8560
WordPress 首页加载速度(根本停不下来!)
一直就发现首页加载的速度非常蛋疼,直接蛋疼的都要碎了。今天仔细的研究了一下,发现出错的地方都是由于Google服务被屏蔽导致的,感谢CCAV。其实一个出错的是Google的自定有搜索框,第二个是Google的开放字体服务;对于第一个确实没什么好的办法,只能暂时去掉了,如果要搜索指定站点的内容可以使用site修饰符例如在Google搜索框中输入site:www.h4ck.org.cn 关键词 然后搜索即可。至于第二个问题,解决的办法比较简单,出错的是wp-includes/script-loader.php,第602行的内容:
obaby
2023/02/23
4600
wordpress解决谷歌字体问题–与谷歌字体的战争!
这个问题算是困扰很久了,以往是用插件,勉强好一点,但是,随着版本更新,谷歌问题又一次出现,so,这次修改源代码,使用360提供打代理站点来解决谷歌字体的问题。其次还用了修改源代码的方式。
十四君
2019/11/28
1.4K0
分享纯代码禁用WordPress谷歌字体
WordPress加载谷歌字体会拖慢国内程序的运营速度,今天全百科网就给大家分享下如何利用代码禁止谷歌字体的调用方法。
于飞云计算
2019/06/24
1.3K0
分享纯代码禁用WordPress谷歌字体
解决新版wordpress打开速度超级慢的问题
突然发现更新到wordpress3.9以后,网站的打开速度变得超慢。开始还以为是自己服务器的原因,把网站从美国搬家到中国香港,还是一样慢。然后仔细排查了一下原因,发现是由于 Google服务器无法访问造成的,因为新版wordpress系统中会加载谷歌Opensans字体样式,导致网站非常的慢,需要等待很久。本人新手,有问题喜欢到网上“拿来”。下面是在网上找到的办法,本人懒,采用的第二种方法,问题已经解决。 第一、取消谷歌Open sans字体加载(wp更新不受影响) 1、添加代码法 通过禁用谷
用户2135432
2018/06/04
5.7K1
解决Octopress博客访问慢的问题
买了这个域名已经一周了,已经决定博客的面向群体为汉语用户。但是发现国内访问还是超级慢,慢的让人无法接收了,当然具体原因,大家都懂得。没办法,尝试使用过安全宝,速度并没有明显替身,反而搜索引擎收录加少了,遂弃用。于是只好自己修改Octopress程序了。修改之前的访问速度以分钟计数。修改完成之后,秒开了有木有。
技术小黑屋
2018/09/04
1.1K0
重置多说配置后的问题,这是不让我从良的节奏啊(附禁用谷歌在线字体的方法)!
本想今天发文从良,金盆洗手,从此不再折腾博客,安心写文章的。结果,发现多说又不能同步服务器评论到本地了!特么真是怕什么来什么啊!想来这金盆暂时用不着了。。。 想到昨天手贱重置了多说配置,看来元凶已出: 前两天发现,多说弹出的评论通知,里面的超链接总是带了 www,也就是说,我的博客本身是不带 www 的,但是多说提示框里面却是 http://www.zhangge.net/***,真是个坑! 于是,先停用了其他插件,并重置了多说配置(手贱啊),发现通知已恢复正常!现在反省一下,感觉根本不用重置多说配置,导致
张戈
2018/03/23
1.1K0
今天就和朋友们分享下,wordpress网站后台最近打开速度很慢的原因及解决方法。推荐第三种方法
1、安装插件:在插件中搜索 Disable Google Fonts,选择安装,然后启用,这样就可以禁止Google字体的加载,这样就可以提高访问速度了。
超级小可爱
2023/02/20
9890
fonts.googleapis.com访问太慢导致站点加载很慢
有些网站需要加载谷歌字体,由于网络问题或者某些问题,fonts.googleapis.com访问太慢会导致站点加载很慢。虽然最后能看到网站,但实际上谷歌字体依然加载失败了,这个体验就非常差劲了。
雨临Lewis
2022/01/12
4.4K0
fonts.googleapis.com访问较慢[已解决]
自己写的测试工具发现最近打开页面时快时慢,查了原因,发现是css引用的谷歌字体源:fonts.googleapis.com
cywhat
2022/11/22
1.7K0
怎么禁止WordPress后台加载谷歌字体?
怎么禁止WordPress后台加载谷歌字体?最近发现登录WordPress后台异常缓慢,经常卡在fonts.googleapis.com,这是由于Wordpress后台外链加载了谷歌字体(代码位置在wordpresswp-includesscript-loader.php第580行),而谷歌服务器大家都知道的原因国内访问困难,严重影响页面加载速度。
主机教程网2bcd.com
2022/11/08
1.7K0
【WordPress优化一】挑选一个好的主题
WordPress的强大体现在了您如何利用WordPress去创造您自己的网站,可能回答这个问题,多数人会说,用主题、用插件来解决。
夏末浅笑
2019/01/10
7390
wordpress博客近期变慢之解决(fonts.google.com)「建议收藏」
网页长时间无响应,提示”正在等待 fonts.proxy.ustclug.org 的响应”_… 打开博客文章,查看源代码,能够看到在head部分有
全栈程序员站长
2022/07/06
4530
WordPress 通过模板文件和自带的函数引入 css/js 的两种方法
WordPress 引入css/js 是我们制作主题时首先面对的一个难点,任何一款主题都要加载自己的 css,js,甚至很有可能还需要加载 Jquery 文件,网上方法特多,说法不一,我们今天借鉴 wordpress 官方最新的 twentysixteen 主题来学习总结一下 WordPress 引入 css/js 各种常用方法,以及最优化的加载方法。
Yangsh888
2022/03/28
1.9K0
前端字体截取技术,做炫酷网站再也不用怕中文字体数据量大啦!【实战】
众所周知,相对于英文字体,中文字体天生是“庞然大物”。英文字体两三百KB已经很大了,而中文字体几MB十几MB都算小的。一方面,中文字体包含的字形数量极多,动辄数以千计甚至万计,而英文字体则只需包含几十个基本字符和符号,哪怕支持多种语言及字符变体,容量达到三千多个字形已经算非常庞大的了。另一方面,中文字形的曲折变化复杂度高,在基于轮廓的矢量字体设计中,用于控制中文字形曲线的控制点普遍比英文更多,因而需要的数据量更大,也会导致字体文件膨胀。
一墨编程学习
2018/10/27
3.1K0
如何在 WordPress 主题中使用本地托管的 Google 字体
前面我们介绍 WordPress 官方要求主题作者切换到本地托管字体,今天简单说说如何实现在本地托管的 Google 字体。
Denis
2023/04/13
7220
手把手教你使用Flask轻松部署机器学习模型(附代码&链接) | CSDN博文精选
当数据科学或者机器学习工程师使用Scikit-learn、Tensorflow、Keras 、PyTorch等框架部署机器学习模型时,最终的目的都是使其投入生产。通常,我们在做机器学习项目的过程中,将注意力集中在数据分析,特征工程,调整参数等方面。但是,我们往往会忘记主要目标,即从模型预测结果中获得实际的价值。
AI科技大本营
2019/11/12
2.7K0
手把手教你使用Flask轻松部署机器学习模型(附代码&链接) | CSDN博文精选
推荐阅读
相关推荐
关于WordPress中字体加载慢的问题解决方案
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验