安卓6.0怎么看电池用量 查看Android M每毫安电量方法

安卓6.0怎么看电池用量 查看Android M每毫安电量方法,第1张

安卓60棉花糖Android M系统公布之后很多功能让人惊叹,如增加新的管理权限控制,让用户更精确地控制应用程序的访问权限,还支持USB type-C。Android M改善了系统的音量控制功能,优化了内存管理和多窗口UI,并提供了更好的备份功能。最新Android M可查看电池每毫安时的用电详情,箱知道安卓60怎么看电池用量吗?请跟安下小编一起来看看。安卓60怎么看电池用量 查看Android M每毫安电量方法Android手机是如何耗电的?虽然我们可以查看总App耗电情况,却无法获知具体是如何耗电的。在最新安卓60第三预览版中,Google加入了应用在每毫安时的用电情况,虽然这项功能对于普通使用者而言并无太多用途,不过对于开发者而言,这项功能可以有效的反映出App在AndroidM上的运行情况。

背景介绍

目前对于移动设备而言,电量是很重要的一个方面。现在大家使用手机基本每天都需要充电,所以用户也非常关注耗电的问题,如果应用设计不合理导致电量大量消耗,那么对于关注耗电的用户而言,这款应用将会是首要卸载目标。因此,作为测试人员,我们也应该对应用的耗电做一些针对性测试。

Android电量测试

各参数意义

battery_level: 电量,可以看出电量的变化

plugged: 充电状态,这一栏显示是否进行了充电,以及充电的时间范围。

Screen: 屏幕是否点亮,这一点可以考虑到睡眠状态和点亮状态下电量的使用信息。

Top: 该栏显示当前时刻哪个app处于最上层,就是当前手机运行的app,用来判断某个app对手机电量的影响,这样也能判断出该app的耗电量信息。该栏记录了应用在某一个时刻启动,以及运行的时间,这对我们比对不同应用对性能的影响有很大的帮助。

wake_lock: wake_lock该属性是记录wake_lock模块的工作时间。是否有停止的时候等。

running: 界面的状态,主要判断是否处于idle的状态。用来判断无 *** 作状态下电量的消耗。

wake_lock_in: wake_lock有不同的组件,这个地方记录在某一个时刻,有哪些部件开始工作,以及工作的时间。

Gps: gps是否开启。

phone_in_call: 是否进行通话。

Sync: 是否跟后台同步。可以把鼠标停在某一项上面。可以看到何时sync同步启动的,持续时间Duration多久。电池容量不会显示单一行为消耗的具体电量,这里只能显示使用电池的频率和时长,你可以看分时段的剩余电量来了解具体消耗了多少电量。

Job: 后台的工作,比如服务service的运行。

data_conn: 数据连接方式的改变,上面的edge是说明采用的gprs的方式连接网络的。此数据可以看出手机是使用2g,3g,4g还是wifi进行数据交换的。这一栏可以看出不同的连接方式对电量使用的影响。

Status: 电池状态信息,有充电,放电,未充电,已充满,未知等不同状态。这一栏记录了电池状态的改变信息。

phone_signal_strength: 手机信号状态的改变。这一栏记录手机信号的强弱变化图,依次来判断手机信号对电量的影响。

Health: 电池健康状态的信息,这个信息一定程度上反映了这块电池使用了多长时间。这一栏记录电池状态在何时发生改变,上面的图中电池状态一直处于good状态。

Plug: 充电方式,usb或者插座,以及显示连接的时间。这一栏显示了不同的充电方式对电量使用的影响。

优点:结果直观,有详细的耗电数据

缺点:不支持50以下的android系统

获取数据注意事项:

获取测试结果时我们也要注意数据的有效性,避免数据误差,让数据更有效的说明问题,下面提供两种方法,来提高获取数据的有效性。

一、横向对比法:分两步测试,第一步测量手机硬件运行消耗的电量;第二步测试手机硬件和软件运行综合的耗电量。最后将两次的耗电进行对比,得出软件消耗的电量大小;

二、纵向对比法:同时进行两台手机,其中一台手机不运行软件,另一台手机运行软件;分别获得两台手机的耗电量,对比两台手机耗电量差异,得出软件消耗的电量大小。

这两种方法在测试上有一定的差异,很多应用软件都是需要移动网络的支持,而手机接收的网络信号是会随时间变化的。

因此,第一种方法的误差主要来源于手机在不同的基站网络下工作状态的变化。

第二种方法的差异则体现在两台手机本身硬件消耗的电量可能存在差异,所以需要尽可能使用同一型号,同一批次的手机。

运用这些ADB命令可以很直观的查看到你手机上的硬件与软件方面的详细信息。可查看手机系统的具体命令如下:getprop 查看机器的全部信息参数

getprop roserialno 查看机器的SN号

getprop rocarrier 查看机器的CID号

getprop rohardware 查看机器板子代号

首先在你的电脑键盘上同时按下 WIN+R ,这时候会d出一个 运行 窗口。

接着在框中输入 CMD ,并按下 确定 。这时候就会d出一个命令窗了!

上面所提供的ADB命令也就是在这个窗口下所运行的!先输入 adb shell ,按下回车。然后就可以开始输入上面所提供的命令了!getprop roserialno:查看机器的SN号getprop rocarrier:查看机器的CID号android女用的是传说中三星的M100S,而这里作为示例的是T-Mobile版的G1,所以在这显示的是TMUS。getprop rohardware:查看机器板子代号可以看到G1的开发代号叫作trout!getprop robootloader:查看SPL(Hboot)版本号getprop:查看机器的全部信息参数在这能看到你机器的全部的信息参数,从你的硬件信息到所刷的ROM版本信息。

1 打开终端,进入上述目录,如下图所示:

2 输入adb shell,打开adb命令行,如下图所示:

3 查看cpu使用情况:

输入命令:top -m 10 -s cpu(-m显示最大数量,-s 按指定行排序),如下图所示:

参数含义:

PID : progress identification,应用程序ID

S : 进程的状态,其中S表示休眠,R表示正在运行,Z表示僵死状态,N表示该进程优先值是负数

#THR : 程序当前所用的线程数

VSS : Virtual Set Size虚拟耗用内存(包含共享库占用的内存)

RSS : Resident Set Size实际使用物理内存(包含共享库占用的内存)

PCY : 前台(fg)和后台(bg)进程

UID : User Identification,用户身份ID

Name : 应用程序名称

注意第一列的pid,使用pid值可以查看当前程序的内存使用情况。

4 查看指定程序内存使用情况:

输入命令: dumpsys meminfo 3253,如下图所示:

参数含义:

dalvik : dalvik使用的内存

native : native堆上的内存,指C\C++堆的内存(android 30以后bitmap就是放在这儿)

other : 除了dalvik和native的内存,包含C\C++非堆内存······

Pss : 该内存指将共享内存按比例分配到使用了共享内存的进程

allocated : 已使用的内存

free : 空闲的内存

private dirty : 非共享,又不能被换页出去的内存(比如linux系统中为了提高分配内存速度而缓冲的小对象,即使你的进程已经退出,该内存也不会被释放)

share dirty : 共享,但有不能被换页出去的内存

5 使用ctrl + c,退出adb命令行。

3)查看进程列表:adb shell "ps",同时也能获取到应用的UID,方式如下(不需root权限):

u0_a开头的都是Android的应用进程,Android的应用的UID是从10000开始,到19999结束,可以在Processjava中查看到(FIRST_APPLICATION_UID和LAST_APPLICATION_UID),u0_a后面的数字就是该应用的UID值减去FIRST_APPLICATION_UID所得的值,所以,对于截图这个应用进程,它是u0_a155,按前面的规制,它的UID就是155 + FIRST_APPLICATION_UID = 10155。

VSS - Virtual Set Size 虚拟耗用内存(包含共享库占用的内存)

RSS - Resident Set Size 实际使用物理内存(包含共享库占用的内存)

PSS - Proportional Set Size 实际使用的物理内存(比例分配共享库占用的内存)

USS - Unique Set Size 进程独自占用的物理内存(不包含共享库占用的内存)

一般来说内存占用大小有如下规律:VSS >= RSS >= PSS >= USS

使用 adb shell "dumpsys meminfo -s <pakagename | pid>"命令,输出结果分以下4部分:

PS:在apk内调用运行获取其他app的内存数据则需要root权限

adb命令:adb shell dumpsys gfxinfo <package | pid>

正常情况下帧率应该在1667ms左右,1秒60帧,执行结果如下:

详细计算方法如下:

还有一个命令是: adb shell dumpsys SurfaceFlinger --latency LayerName

其中LayerName在各个不同系统中获取的命令是不一样的

在Android 6系统直接就是SurfaceView

在Android 7系统中可以通过 dumpsys window windows | grep mSurface | grep SurfaceView 然后通过数据截取到

在Android 8系统中可以通过 dumpsys SurfaceFlinger | grep android包名获取到

执行命令结果如下:

计算方法比较简单,一般打印出来的数据是129行(部分机型打印两次257行,但是第一部分是无效数据,取后半部分),取len-2的第一列数据为end_time,取len-128的第一列数据为start_time

fps = 127/((end_time - start_time) / 10000000)

至于为啥要取第一列数据,这里不做过多介绍,欢迎参看这两篇文章

老罗的文章SurfaceView原理

Android性能测试之fps获取

至于为啥要处于1000000,因为命令打印出来的是纳秒单位,要转为毫秒进行计算,127就是因为命令一次打印出来127帧的数据而已

有两种方法可以获取

1) adb shell "top -n 5 | grep <package | pid>" ,第三列就是实时监控的CPU占用率(-n 指定执行次数,不需root权限),这边top命令执行需要2到3s左右,一般可以采用busybox 的top命令执行,效率会快很多

2) adb shell "dumpsys cpuinfo | grep <package | pid>"

两种方法直接区别在于,top是持续监控状态,而dumpsys cpuinfo获取的实时CPU占用率数据

adb命令:adb shell "dumpsys batterystats < package | pid>" (Android 50后引入)

获取单个应用的耗电量信息,具体返回结果待研究

adb命令:adb shell "dumpsys battery"

出现信息解读:

AC powered:false 是否连接AC(电源)充电线

USB powered:true 是否连接USB(PC或笔记本USB插口)充电

Wireless powered:false 是否使用了无线电源

status: 1 电池状态,2为充电状态,其他为非充电状态

level:58 电量(%)

scale: 100 电量最大数值

voltage: 3977 当前电压(mV)

current now: -335232 当前电流(mA)

temperature:355 电池温度,单位为01摄氏度

adb 命令:adb shell "dumpsys< package | pid> | grep UID" [通过ps命令,获取app的UID(安装后唯一且固定)]

adb shell cat /proc/uid_stat/UID/tcp_rcv [cat为查看命令,读取tcp_rcv获取应用接收流量信息(设备重启后清零)]

adb shell cat /proc/uid_stat/UID/tcp_snd [cat为查看命令,读取tcp_snd获取应用发送流量信息(设备重启后清零)]

计算流量消耗步骤:

或者还有一种方式获取应用流量消耗:

首先判断类型:

cat /sys/class/thermal/thermal_zone/type

只有红框框出来的是有效的

cat /sys/class/thermal/thermal_zone/temp

获取CPU温度

dumpsys battery | grep temperature 单位01摄氏度

获取/proc/stat文件内容(无权限限制)

总的cpu时间片是 total = user+nice+system+idle+iowait+irq+softirq

忙碌时间为 notidle = user+nice+system +iowait+irq+softirq

cpu使用率计算方法为,先取开始的total值和忙碌时间notidle,隔一段时间片,再取一次计算total2,notidle2, cpuuse = (notidle2 – notidle) 100 / (total2 - total)%

PS:由于Android 8权限收紧,在Android 8系统手机内apk内读取文件内容为空,需要shell权限才可获取文件内容,下同

读/sys/devices/system/cpu/cpuX/cpufreq/scaling_cur_freq文件的值,X不定,看是几核手机,scaling_cur_freq是否存在也不一定,需要判断

至于为啥不取cpuinfo_cur_freq文件的值,原因是android 6,7系统获取的时候,这个文件shell没有读取权限,需要root权限

参考文章: >

以上就是关于安卓6.0怎么看电池用量 查看Android M每毫安电量方法全部的内容,包括:安卓6.0怎么看电池用量 查看Android M每毫安电量方法、Android电量测试、如何用adb命令查看Android手机具体某个应用的耗电量等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/10092138.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-05
下一篇2023-05-05

发表评论

登录后才能评论

评论列表(0条)

    保存