每次一到 fc 过后,就是各种性能的问题会报出来, 本来想写一写, 已看网上就有好多了。
那我就直接copy把,也懒得动手了, 后续一直补充~~~ 都有对应连接
一. activity 启动时间的问题
https://developer.android.com/topic/performance/launch-time.html
Displayed Time 启动加载代码、初始化工作,从启动进程到第一次绘制完成所消耗的时间
reportFullyDrawn() 如果有异步加载的内容的话,在 Displayed Time 执行后异步加载的内容执行完毕的时间;
需要在代码中进行手动调用,比如:
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
try{
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
// > android 4.4
reportFullyDrawn();
}
}catch(SecurityException e){
}
}
ADB 查看
am start -n com.test/com.test.TestActivity 单纯根据包名 类名启动activity
使用am start
String s = "am start -n "+new ComponentName("com.test", "com.test.TestActivity").flattenToShortString();
执行下面命令:
adb [-d|-e|-s <serialNumber>] shell am start -S -W com.example.app/com.example.app.MainActivity
-c android.intent.category.LAUNCHER
-a android.intent.action.MAIN
终端会打印下面内容:
Starting: Intent
Activity: com.example.app/.MainActivity
ThisTime: 2044 最后一个启动的Activity的启动耗时;
TotalTime: 2044 所有Activity的启动耗时;
WaitTime: 2054 ActivityManagerService启动App的Activity时的总时间(包括当前Activity的onPause()和自己Activity的启动)。
Complete
三. Android 通过adb shell命令查看内存,CPU,启动时间,电量等信息
http://blog.csdn.net/zouxiongqqq/article/details/50658486
1、 查看内存信息
1)查看所有内存信息
dumpsys meminfo
C:\Users\laiyu>adb shell
shell@android:/ $ dumpsys meminfo
2)查看某个包的内存信息
dumpsys pkg_name
shell@android:/ $ dumpsys meminfocom.tencent.mobileqq > /mnt/sdcard/meminfo.txt
bileqq > /mnt/sdcard/meminfo.txt
shell@android:/ $
2、 查看CPU信息
方法1:linux系统的top命令
C:\Users\laiyu>adb shell
shell@android:/ $ top -d 1 | busybox grep"com.tencent.mobileqq" > /mnt/sdcard/p
erformance.txt
encent.mobileqq" >/mnt/sdcard/performance.txt
方法2:通过dummpsys cpuinfo命令
命令:adb shell dumpsys cpuinfo
或者分成两部走(参考查看电量信息)
先adb shell,然后dumpsys cpuinfo
例:
C:\Users\laiyu>adb shell dumpsys cpuinfo| find "com.tencent.mobileqq"
0.1% 16731/com.tencent.mobileqq: 0.1% user + 0% kernel / faults: 8 minor
0%16753/com.tencent.mobileqq:MSF: 0% user + 0% kernel
0%19646/com.tencent.mobileqq:qzone: 0% user + 0% kernel
3、 查看应用启动时间
命令:
adb logcat -c && adb logcat -f/mnt/sdcard/up.txt -s tag
选项说明
-c 清屏
-f 指定运行结果输出文件,默认输出到标准设备(一般是显示器
-s 设置默认的过滤级别为Silent
tag 仅显示priority/tag
更多信息烦请参考 adb logcat -help
例:
先启动app,然后执行如下命令
C:\Users\laiyu>adb logcat -c &&adb logcat -f /mnt/sdcard/up.txt -s ActivityManager
4、 查看电量信息
命令:
dumpsys battery
例:
shell@android:/ $ dumpsys battery
dumpsys battery
Current Battery Service state:
ACpowered: false
USBpowered: true
status: 5
health: 2
present: true
level: 100
scale: 100
voltage:4211
temperature: 297
technology: Li-poly
shell@android:/ $
四、adb shell 监控手机cpu使用率 http://blog.csdn.net/thn_sweety/article/details/53409861
最近在做Android monitor ,利用adb shell 在pc端监测手机,从网上看的资料总结下,备忘。
1. adb shell dumpsys cpuinfo 得到每个进程使用cpu的详细信息
2. adb shell top –n 1 | grep proc 获取指定进程的cpu信息
3. cat /proc/cpuinfo 获取cpu 硬件信息
4. cat /proc/stat
目前查到的有以上四种获取cpu信息的方式,对于1,3未做详细研究,后续补充
对于2由于top命令执行时间太久,大概3到4秒,执行结果:
User 29%, System 4%, IOW 0%, IRQ 0%
User 359 + Nice 1 + Sys 52 + Idle 787 + IOW 5 + IRQ 8 + SIRQ 2 = 1214
PID PR CPU% S #THR VSS RSS PCY UID Name
19269 1 25% S 121 3323236K 206268K fg u0_a98 com.antutu.ABenchMark
517 3 2% S 82 104372K 1148K fg root /system/vendor/bin/thermal-en gine
1255 2 1% S 152 2388920K 143140K fg system system_server
374 1 1% S 1 0K 0K fg root msm_thermal:fre
第一行数据(cpu占用率):
User 用户进程
System 系统进程
IOW IO等待时间
IRQ 硬中断时间
第二行数据(cpu使用情况,单位据说是jiffies):
User 处于用户态的运行时间,不包含优先值为负进程
Nice 优先值为负的进程所占用的CPU时间
Sys 处于核心态的运行时间
Idle 除IO等待时间以外的其它等待时间
IOW IO等待时间
IRQ 硬中断时间
SIRQ 软中断时间
第三行数据:
PID 进程id
PR 优先级
CPU% 当前瞬时CPU占用率
S 进程状态:D=不可中断的睡眠状态, R=运行, S=睡眠, T=跟踪/停止, Z=僵尸进程
#THR 程序当前所用的线程数
VSS Virtual Set Size 虚拟耗用内存(包含共享库占用的内存)
RSS Resident Set Size 实际使用物理内存(包含共享库占用的内存)
PCY 调度策略优先级,SP_BACKGROUND/SP_FOREGROUND
UID 进程所有者的用户id
Name 进程的名称
对于4,最终选择的是这种方式,执行快,而且android monitor 的源码中也是用这种方式计算的,以及查看的其他工具,靠谱。
[html] view plain copy
$ adb shell cat /proc/stat
cpu 8616133 258931 8249921 30853032 144979 755992 509627 0 0 0
cpu0 1624419 61721 2732353 26158542 135605 494463 322680 0 0 0
cpu1 1652481 59830 2358955 2229236 7529 155560 96846 0 0 0
cpu2 2676653 73144 1663307 1306790 876 58651 52434 0 0 0
cpu3 2662580 64236 1495306 1158464 969 47318 37667 0 0 0
intr 423574039 0 0 0 41675528 0 21889144 729961 5 4 5 8096 0 0 0 0 314 473 0 1891 516482 0 0 11171628 0 0 0 0 127752 39799 8755299 299379 0 2 0 0 0 0 9939721 0 0 0 0 0 67091 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 471664 708335 7571004 16602123 0 0 0 0 35 4522234 0 291 82 0 0 0 0 0 0 0 11028 1 0 0 0 0 0 0 0 0 109 1 3 12 0 0 0 8 0 0 0 0 68 0 68 0 0 153 0 0 0 62 0 0 0 0 0 0 0 1026 0 413 0 0 0 0 0 43 0 0 0 0 0 4477092 0 0 0 0 0 0 0 1550 0 0 143756 7 7 7 0 0 0 0 0 0 0 15517 3949201 0 333 1 0 1 22 0 8 0 5318 8 31708 14 0 14 5544 383 2155 712722 183889 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 246235 0 0 0 0 12601 94475 0 324 0 5 0 69 0 0 0 0 0 0 0 0 0 115 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 7938 490 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1885 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 3729 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 155646 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 18152006 0 105 799 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1086 0 0 0 0 0 0 0 0 0 0
ctxt 862498687
btime 1479122422
processes 789948
procs_running 4
procs_blocked 0
softirq 193635390 305292 39873286 732253 2713236 305292 305292 30544250 30361992 86707 88407790
以上为4核手机的执行情况
cpu <span style="color:#ff6666;">8616133 258931 8249921 30853032 144979 755992 509627</span> 0 0 0
红色字体数字表示的含义:
- user 从系统启动开始累计到当前时刻,处于用户态的运行时间,不包含 nice值为负进程。
- nice 从系统启动开始累计到当前时刻,nice值为负的进程所占用的CPU时间
- system 从系统启动开始累计到当前时刻,处于核心态的运行时间
- idle 从系统启动开始累计到当前时刻,除IO等待时间以外的其它等待时间
- iowait 从系统启动开始累计到当前时刻,IO等待时间
- irq 从系统启动开始累计到当前时刻,硬中断时间
- softirq 从系统启动开始累计到当前时刻,软中断时间
后面三个0的字段含义:
<pre style="word-wrap: break-word;"><pre name="code" class="python"><pre name="code" class="plain">- steal: involuntary wait
- guest: running a normal guest
- guest_nice: running a niced guest
cpu利用率的计算:
取很短相邻时间内的两次以上数据
cpu_total=user+nice+system+idle+iowait+irq+soft(据说后面为0的三可能会不为0,但是没遇到过,遇到再补充)
cpu_rate=((cpu_total2-cpu_total1)-(idle2-idle1))/((cpu_total2-cpu_total1))
备注:以上是参考中文各个网站的资料
stackoverflow上,有另一种计算方式,相似但是不完全一致,计算cpu_total时,没有加iowait,但加了steal
http://stackoverflow.com/questions/23367857/accurate-calculation-of-cpu-usage-given-in-percentage-in-linux
评论中的参考资料,写的有理有据,觉得比上一种计算方式更可靠,但只有how没有why
五 build.prop cpu 相关信息 http://blog.csdn.net/w695050167/article/details/73548577
查看设备信息build.prop里面还有好多其他的信息
root@dior:/data # cat /system/build.prop | grep "product"
cat /system/build.prop | grep "product"
ro.product.model=HM NOTE 1LTE
ro.product.brand=Xiaomi
ro.product.name=dior
ro.product.device=dior
ro.product.board=MSM8226
ro.product.cpu.abi=armeabi-v7a
ro.product.cpu.abi2=armeabi
ro.product.locale.language=zh
ro.product.locale.region=CN
# ro.build.product is obsolete; use ro.product.device
ro.build.product=dior
ro.product.manufacturer=Xiaomi
ro.product.cuptsm=XIAOMI|ESE|02|01
查看CPU的架构等信息
root@dior:/data # cat /proc/cpuinfo
cat /proc/cpuinfo
Processor : ARMv7 Processor rev 3 (v7l)
processor : 0
BogoMIPS : 38.40
processor : 1
BogoMIPS : 38.40
processor : 2
BogoMIPS : 38.40
processor : 3
BogoMIPS : 38.40
Features : swp half thumb fastmult vfp edsp neon vfpv3 tls vfpv4 idiva idivt
CPU implementer : 0x41
CPU architecture: 7
CPU variant : 0x0
CPU part : 0xc07
CPU revision : 3
Hardware : Qualcomm MSM 8226 (Flattened Device Tree)
Revision : 0000
Serial : 0000000000000000
查看WiFi密码(需要root)
cat /data/misc/wifi/*.conf
1
截图保存手机
adb shell /system/bin/screencap -p /sdcard/screenshot.png
六 Android中dumpsys命令使用 http://blog.csdn.net/u013512708/article/details/53023736
Android中dumpsys命令使用
adb shell dumpsys,默认打印出当前系统所有serivce信息,在后面加上具体的服务名。
一、需要列出当前运行的服务,可运行:
adb shell dumpsys |findstr DUMP
二、获取设备分辨率:
adb shell dumpsys display | findstr DisplayDeviceInfo
DisplayDeviceInfo{"内置屏幕": 1080 x 1920, 55.0 fps, density 480, 464.949 x 468.923 dpi...
三、获取设备电池信息:
adb shell dumpsys battery
Current Battery Service state: AC powered: false USB powered: true
Wireless powered: false status: 2 #电池状态 health: 2 present: true level: 34 #电量 scale: 100 voltage: 3848 current now: -427943 temperature: 280 #电池温度 technology: Li-ion
四、获取CPU信息:
adb shell dumpsys cpuinfo
五、获取内存信息:
adb shell dumpsys meminfo
要获取具体应用的内存信息,可加上包名:
adb shell dumpsys meminfo PACKAGE_NAME
六、获取Activity信息:
adb shell dumpsys activity
加上-h 可以获取帮助信息
获取当前界面的UI信息,可以用:
adb shell activity top
获取当前界面的Activity:
adb shell dumpsys activity top | findstr ACTIVITY
七、获取package信息:
adb shell dumpsys package
加上-h可以获取帮助信息
获取某个包的信息:
adb shell dumpsys package PACKAGE_NAME
八、获取通知信息
adb shell dumpsys notification
NotificationRecord(0x44217920: pkg=com.sohu.newsclient useron=0x7f0201b5 / com.tencent.news:drawable/icon
pri=0 score=0 contentIntent=PendingIntent{4294d748: PendingIntentRecord{44088e90 com.tencent.news startActivity}} deleteIntent=null tickerText=null contentView=android.widget.RemoteViews@441fc810 defaults=0x00000001
flags=0x00000010 sound=null vibrate=null led=0x00000000 onMs=0 offMs=0 extras={ android.title=农业部:中国超级稻亩产超1吨 android.subText=null android.showChronometer=false android.icon=2130837941 android.text=农业部今日通报称,经专家测产,袁隆平领衔培育的中国“超级稻”亩产过千公斤,创造1026.7公斤新纪录。详情>>
android.progress=0 android.progressMax=0 android.showWhen=true android.infoText=null android.progressIndeterminate=false android.scoreModified=false }
九、获取wifi信息;
adb shell dumpsys wifi
可以获取当前连接的wifi名、搜索到的wifi列表、wifi强度等
十、获取电源管理信息:
adb shell dumpsys power
可以获取到是否处于锁屏状态:mWakefulness=Asleep或者mScreenOn=false
亮度值:mScreenBrightness=255
屏幕休眠时间:Screen off timeout:60000 ms
屏幕分辨率:mDisplayWidth=1440,mDisplayHeight=2560
十一、获取电话信息:
adb shell dumpsys telephony.registry
可以获取到电话状态,例如:
mcallState值为0,表示待机状态。1表示来电未接听,2表示电话占线状态
mCallForwarding=false #是否启用呼叫转移
mDataConnectionState #0:无数据连接 1:正在创建数据连接 2:已连接
mDataConnectionPossible=true #是否有数据连接
mDataConnectionApn= #APN名称