android性能检测和分析工具 一

性能检测和分析工具 一

  1. 16ms 黄金准则

    设备的屏幕刷新率为60帧每秒 , 1/60fps=16.6每帧,超过16,会有掉帧的现象

  2. 绘图优化的过程

    软解时代: android2.3,之前,通过CPU绘图

    硬解时代: android2.3之后,通过GPU绘图

    黄油时代: android4.1之后,通过垂直同步和多缓冲机制提高绘图效率

    异步绘制:android5.0之后,Render Thread,异步绘制绘制.某帧延迟,不影响下一帧

  3. 布局核心准则

    View绘制三步:measure layout draw

    不宜超过8层

  4. RelativeLayout and LinearLayout

    RL应尽量避免嵌套,LL要保证层级不能太深

  5. HierarchyViewer

    查看View层级,减少不必要的View

    可以把View的树形结构图保存为png或者psd

  6. Merge和ViewStub 另外一本

  7. Trace for OpenGL ADM中进不去??

  8. Profile GPU Rendering 开发者选项中,前有

    可以使用adb到处数据,需要开发者选项中选中

    adb shell dumpsys gfsinfo >***.txt
    adb shell dumpsys gfsinfo <包名> framestats //详细的信息
  9. Logcat

    主线程卡顿会有log输出(废话)

    Skipped 50 frames!…………

  10. trace.txt

    保存ANR Log的位置

    adb pull /data/anr/traces.txt  /电脑位置/    
  11. android studio GPU monitor 已经不存在了 现在是androidProfile

  12. Systrace

    ADM中,选中启动Systrace,收集保存为html

    W S  对网页内容缩放

    AD  对网页内容左右移动

    主要分为CPU区域,SurfaceFlinger ,应用区域(绿色:流畅 黄色:小幅延迟 红色:验证延迟),Alert

  13. Traceview ????高端

  14. adb计算应用启动时间

    adb shell am start -W com.acmp/com.acmp.MainAcitity

    实验报错 class not exist

    ThisTime 最后一个启动的activity的启动耗时

    TotalTime 自己启动的所有activity的时间

    WaitTime 总时间

  15. 内存的管理和优化的方式

    在不需要对象的时候,销毁对象

    如果对象没有被销毁,则该对象一定作为可以复用的对象而不是存在多个

  16. 内存区分

    寄存器(Registers): 用于存储指令,地址,数据

    栈 Stack 存放基本类型的数据 对象的引用和函数地址(生命周期结束后,由GC系统回收,速度慢)

    堆 Heap 存放对象的本身和数组,开发者控制(生命周期结束后,由虚拟机回收,速度快)

    静态域 static field  存储静态变量

    常量池 constant pool 存储常量

    ----------------

    常见内存类型

    VSS 虚拟耗用内存 

    RSS 实际使用的物理内存

    PSS 实际使用的物理内存

    USS 进程独占的物理内存

  17. 系统内存分析工具

    process stats 开发者选项中

    apps-Running 正在运行的应用 设置中

    Dumpsys Meminfo 内存快照(adb shell dumpsys meminfo <包名>)

    Dumpsys Procestats 指定时间段内的内存分配状况 (adb shell dumpsys procstats -h )

  18. 内存信息概念

    share内存 每个app进程所获取到的share的内存的值

    private内存 每个应用独享的那部分已分配的内存

    -----

    Dirty 内存 存储的RAM中的内存数据,当RAM中清楚之后,需要重新获取原内存中的数据

    Clean 内存 缓存在文件中,当RAM中清除之后,可以重新从文件中读取

  19. GC系统 Gabage Collection 垃圾回收

    android2.3:一次完整的Heap遍历,内存越大,GC时间越长

    android4.4:遍历一部分的Heap,但是会产生比较多的内存碎片

    android5.0:加快了清理速度,减少了打断进程的次数,整理内存碎片

    常见的GCRoot对象:

    class,JNI,Thread,Stack,静态,常量

  20. ActivityManager.MemoryInfo

    ActivityManager am = (ActivityManager) getSystemService(Activity.ACTIVITY_SERVICE);
            ActivityManager.MemoryInfo memoryInfo = new ActivityManager.MemoryInfo();
            am.getMemoryInfo(memoryInfo);
    //        memoryInfo.totalMem 系统可用内存
    //        memoryInfo.availMem 系统当前剩余内存
    //        memoryInfo.lowMemory 是否处于低内存状态
    //        memoryInfo.threshold 内存阀值
            am.getMemoryClass();//单个app的最大值
            am.getLargeMemoryClass();//单个app的最大值(申请large heap)
    //        Formatter.formatFileSize()//格式化数据
  21. Debug,MemoryInfo

    Debug.MemoryInfo memoryInfo1 = new Debug.MemoryInfo();
            Debug.getMemoryInfo(memoryInfo1);
    //        memoryInfo1.dalvikPrivateDirty
    //        memoryInfo1.dalvikPss
    //        memoryInfo1.dalvikSharedDirty
        memoryInfo1.getTotalPss();
        memoryInfo1.getTotalSharedDirty();
    //获取的值和adb memoryinfo 类似
  22. Runtime

    Runtime.getRuntime().totalMemory();//总计内存
    Runtime.getRuntime().freeMemory();//剩余的内存  总计内存-剩余内存=已经使用的内存
    Runtime.getRuntime().maxMemory();//最大的内存限制
  23. 获取更多内存的方法

    通过子线程(webView难以回收,放到子线程中,通过kill Process来完成回收)

    通过使用native Heap

    使用OpenGL

    LargeHeap

  24. 系统内存警告

    LMK:低内存管理系统

    onlowmermory 是lmk低内存管理系统发出的系统警告,当此方法被调用时,所有进程级别为background的进程已经被kill

    ComponentCallbacks,可以使用上下文菜单

    context.registerComponentCallbacks(new ComponentCallbacks() {
        @Override
        public void onConfigurationChanged(Configuration configuration) {
    
        }
    
        @Override
        public void onLowMemory() {
    
        }
    });

    onTrimMemory

    此时app处于奇台运行的状态

    TRIM_MEMORY_RUNNING_MODERATE 一级警告 系统即将执行LMK

    TRIM_MEMORY_RUNNING_LOW 二级警告 内存已经接近LMK阀值

    TRIM_MEMORY_RUNNING_CRITICAL 三级警告 LMK已经杀掉优先级为Background的进程

    ------------------------

    此时app处于后台运行的状态

    TRIM_MEMORY_BACKGROUND 一级警告 LMK准备将app列为准备杀掉的对象

    TRIM_MEMORY_MODERATE 二级警告 列为准备杀掉的对象

    TRIM_MEMORY_COMPLETE 三级警告 即将杀掉此app

    ------------------------

    TRIM_MEMORY_UI_HIDDEN ui元素被全部隐藏

    ------------------------

    模拟信号

    adb shell dempsys gfxinfo 包名-cmd trim level

你可能感兴趣的:(Android)