android 优化相关



每次一到 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名称











  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

空白的泡

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值