app耗电优化之一 根据电池情况做任务安排

这里要讲根据电池的当前特征对任务排期。对一个比较耗电的任务,需要在电量比较丰盈的情况下完成,如果电量已经枯萎了,做这样的任务,则会耗尽所有电量。
基于此,在做这样的任务前,获取当前电池特征,并利用电池特征做出是否要执行任务的判断。
详细讲解如下:
1 获取当前的电池特征

/* 获取当前电池状态。将BroadcastReceiver 设为null 则会直接返回当前电池的状态。*/
        IntentFilter ifilter = new IntentFilter(Intent.ACTION_BATTERY_CHANGED);
        Intent batteryStatus = registerReceiver(null, ifilter);
        /**
         *  电池充电状态
         *  public static final int BATTERY_STATUS_UNKNOWN = 1;  未知状态
         *  public static final int BATTERY_STATUS_CHARGING = 2; 充电中
         *  public static final int BATTERY_STATUS_DISCHARGING = 3; 放电中
         *  public static final int BATTERY_STATUS_NOT_CHARGING = 4; 未纯电
         *  public static final int BATTERY_STATUS_FULL = 5; 电满状态
         */
        int status = batteryStatus.getIntExtra(BatteryManager.EXTRA_STATUS, -1);
        /**
         * 电池充电方式, 如果手机正在充电情况下,则可以做一些耗电的操作,其中AC充电时可以最大限度的使用。其次USB充电
         *  public static final int BATTERY_PLUGGED_USB = 2; USB充电
         *  public static final int BATTERY_PLUGGED_WIRELESS = 4; 无线充电
         *  public static final int BATTERY_PLUGGED_AC = 1; AC充电,交流电充电
         */
        int chargePlug = batteryStatus.getIntExtra(BatteryManager.EXTRA_PLUGGED, -1);
        /**
         * 电池电量水平
         */
        int level = batteryStatus.getIntExtra(BatteryManager.EXTRA_LEVEL, -1);
        int scale = batteryStatus.getIntExtra(BatteryManager.EXTRA_SCALE, -1);
        float batteryPct = level / (float)scale;
        /**
         *  public static final int BATTERY_HEALTH_UNKNOWN = 1;    健康状态未知
         *  public static final int BATTERY_HEALTH_GOOD = 2;    健康
         *  public static final int BATTERY_HEALTH_OVERHEAT = 3;  过热
         *  public static final int BATTERY_HEALTH_DEAD = 4;    没电
         *  public static final int BATTERY_HEALTH_OVER_VOLTAGE = 5;  过电压
         *  public static final int BATTERY_HEALTH_UNSPECIFIED_FAILURE = 6; 未定义错误
         *  public static final int BATTERY_HEALTH_COLD = 7; 冷却
         */
        int health = batteryStatus.getIntExtra(BatteryManager.EXTRA_HEALTH, -1);

至于应该在那个时机执行任务,我想读者能够分辨的出,只要别再BATTERY_HEALTH_DEAD 的时候安排任务即可。

2 监听电池充电状态。电池充电往往是干活的好时机,那时候随便你干,电量都能满足
 注册监听

<receiver android:name=".BattertyConnectReceiver">
        <intent-filter>
            <!-- 手机链接充电或断开充电引起变化 -->
            <action android:name="android.intent.action.ACTION_POWER_CONNECTED"/>
             <action android:name="android.intent.action.ACTION_POWER_DISCONNECTED"/>
        </intent-filter>
    </receiver>

接收广播

public class BattertyConnectReceiver extends BroadcastReceiver {
        @Override
        public void onReceive(Context context, Intent intent) {
            int status = intent.getIntExtra(BatteryManager.EXTRA_STATUS, -1);
            if(status == BatteryManager.BATTERY_STATUS_CHARGING){
            //充电状态,好时机
            }else if(status == BatteryManager.BATTERY_STATUS_NOT_CHARGING){
            //断开充电状态
            }
        }
}

3 监听电池低电变化状态
 注册监听

<receiver android:name=".BatteryLevelReceiver">
        <intent-filter>
            <!-- 电量进入不足时或者电量从不足进入足时引起变化 -->
            <action android:name="android.intent.action.ACTION_BATTERY_LOW"/>
            <action android:name="android.intent.action.ACTION_BATTERY_OKAY"/>
        </intent-filter>
    </receiver>

接收广播

public class BatteryLevelReceiver extends BroadcastReceiver {
        @Override
        public void onReceive(Context context, Intent intent) {
            String action = intent.getAction();
            if(ACTION_BATTERY_LOW.equals(action)){
                //电量走向不足档位,做任务状态保存
            }else if(ACTION_BATTERY_OKAY.equals(action)){
                //电量走向充足档位
            }
        }
}

以上API是正对电池特征的一些基本的判断。需要在恰当的电池状态做恰当任务

时间: 2024-10-13 01:38:27

app耗电优化之一 根据电池情况做任务安排的相关文章

app耗电优化

应用消耗电量的源头是使用耗电的器件(感觉就是一句废话).例如屏幕,CPU,GPU,GPS,IO等.可是用户无法停止CPU运转,也无法停止IO等等.除非关机. 当然了应用如果不使用CPU,IO等基本上不可能.因此优化耗电的命题实际上是如何合理的耗电. 首先区分哪些是不合理耗电: 1 长时间占用器件.例如长时间亮屏,长时间读写数据,长时间的网络访问. 2 频繁的开关器件. 例如来回切换网络,来回开关GPS,不停的亮屏灭屏等. 其次,如何检测耗电异常. 这里需要工具(待续) 减少耗电总体想法 1  在

app耗电优化之二 使用电源管理来安排任务

PowerManager 电源管理(电源使用管理).主要管理设备启动,保持活动,休眠,唤醒.其中为了保持任务,提供了PowerManager.WakeLock(唤醒锁).执行任务时持有这个唤醒锁,就可以防止休眠,从而正常的完成任务.当然,代价就是增加了耗电. 另一种情况,如果任务执行后,没有释放该锁,则设备不会进入休眠,进而更多的增加了耗电.实际上WakeLock是站立在耗电优化的对立面的,但是又有很多场景不的不使用,例如在听音乐,看视频的过程中希望设备休眠么? 因此在很多场景必须考虑使用Wak

app 耗电优化之三 使用JobSchedule对任务进行合理排期

JobSchedule 是Android5.0之后添加进去的,之前的版本没有.JobSchedule 原理是一种将任务安排在恰当的实际进行操作一种方案机制.具体提供了那些可选的时机,如下:1 在可用网络下执行.在7.0 之前,应用可以通过监听网络变化来执行任务,当然了前提是应用必须存活.到7.0之后这类API已经失效,但是JobSchedule机制提供了网络变化的监听.进一步可以在网络变化的情况下执行某些操作.例如在wifi环境下执行下载任务等.2 设备在充电或者空闲时执行一些任务.3 设定执行

Android App优化之延长电池续航时间

禁用广播接收器 确保广播接收器在真正需要时才执行指令,在onResume中其中广播接收器,在onPause中禁用, 在manifest文件中声明广播接收器时,事先默认配置成禁用的 <receiver android:name=".BatterReceiver" android:enabled="false"> 网络 1. 后台数据,后台传输数据时,判断ConnectivityManager的getBackgroundDataSetting()的返回值,如

Android APP 性能优化的一些思考

说到 Android 系统手机,大部分人的印象是用了一段时间就变得有点卡顿,有些程序在运行期间莫名其妙的出现崩溃,打开系统文件夹一看,发现多了很多文件,然后用手机管家 APP 不断地进行清理优化 ,才感觉运行速度稍微提高了点,就算手机在各种性能跑分软件面前分数遥遥领先,还是感觉无论有多大的内存空间都远远不够用.相信每个使用 Android 系统的用户都有过以上类似经历,确实,Android 系统在流畅性方面不如 IOS 系统,为何呢,明明在看手机硬件配置上时,Android 设备都不会输于 IO

Android APP性能优化(最新总结)

导语 安卓大军浩浩荡荡,发展已近十个年头,技术优化日异月新,如今Android 8.0 Oreo 都发布了,Android系统性能已经非常流畅了.但是,到了各大厂商手里,改源码自定系统,使得Android原生系统变得鱼龙混杂,然后到了不同层次的开发工程师手里,因为技术水平的参差不齐,即使很多手机在跑分软件性能非常高,打开应用依然存在卡顿现象.另外,随着产品内容迭代,功能越来越复杂,UI页面也越来越丰富,也成为流畅运行的一种阻碍.综上所述,对APP进行性能优化已成为开发者该有的一种综合素质,也是开

Android app 性能优化的思考--性能卡顿不好的原因在哪?

说到 Android 系统手机,大部分人的印象是用了一段时间就变得有点卡顿,有些程序在运行期间莫名其妙的出现崩溃,打开系统文件夹一看,发现多了很多文件,然后用手机管家 APP 不断地进行清理优化 ,才感觉运行速度稍微提高了点,就算手机在各种性能跑分软件面前分数遥遥领先,还是感觉无论有多大的内存空间都远远不够用.相信每个使用 Android 系统的用户都有过以上类似经历,确实,Android 系统在流畅性方面不如 IOS 系统,为何呢,明明在看手机硬件配置上时,Android 设备都不会输于 IO

android App性能优化技巧浅谈

Android App性能优化,安卓App性能优化技巧,无论锤子还是茄子手机的不断冒出,Android系统的手机市场占有率目前来说还是最大的,因此基于Android开发的App数量也是很庞大的.那么,如何能开发出更高性能的Android App?相信是软件开发公司以及广大程序员们头疼的一大难题.今天,就给大家提供几个提高Android App性能的技巧. 高效地利用线程1.在后台取消一些线程中的动作 我们知道App运行过程中所有的操作都默认在主线程(UI线程)中进行的,这样App的响应速度就会受

App性能优化浅谈

前言 前段时间给公司的小伙伴们进行了关于app性能优化的技术分享.这里我稍微整理一下也给大家分享一下.关于性能优化这个话题非常大,涉及面能够非常广,也能够非常深入.本人能力有限,不会给大家讲特别难懂,特别底层的东西.都是我们开发能着手去做的点.大家都在讲性能优化,但对于项目经验不够丰富的朋友非常难有一个概念.做优化的时候也会比較茫然,这里我就给大家指明方向. 从何讲起? 笔者在做产品开发的时候,也遇到性能瓶颈.測试project师反馈了一些比較明显的问题,比方UI界面的过度绘制,列表滑动有明显卡