导航:首页 > 操作系统 > android应用性能分析

android应用性能分析

发布时间:2022-07-05 02:58:49

A. 针对android的性能优化集中哪些方面

一、概要:

本文主要以Android的渲染机制、UI优化、多线程的处理、缓存处理、电量优化以及代码规范等几方面来简述Android的性能优化

二、渲染机制的优化:

大多数用户感知到的卡顿等性能问题的最主要根源都是因为渲染性能。

Android系统每隔16ms发出VSYNC信号,触发对UI进行渲染, 如果每次渲染都成功,这样就能够达到流畅的画面所需要的60fps,为了能够实现60fps,这意味着程序的大多数操作都必须在16ms内完成。

*关于JobScheler的更多知识可以参考http://hukai.me/android-training-course-in-chinese/background-jobs/scheling/index.html

七、代码规范

1)for loop中不要声明临时变量,不到万不得已不要在里面写try catch。

2)明白垃圾回收机制,避免频繁GC,内存泄漏,OOM(有机会专门说)

3)合理使用数据类型,StringBuilder代替String,少用枚举enum,少用父类声明(List,Map)

4)如果你有频繁的new线程,那最好通过线程池去execute它们,减少线程创建开销。

5)你要知道单例的好处,并正确的使用它。

6)多用常量,少用显式的"action_key",并维护一个常量类,别重复声明这些常量。

7)如果可以,至少要弄懂设计模式中的策略模式,组合模式,装饰模式,工厂模式,观察者模式,这些能帮助你合理的解耦,即使需求频繁变更,你也不用害怕牵一发而动全身。需求变更不可怕,可怕的是没有在写代码之前做合理的设计。

8)View中设置缓存属性.setDrawingCache为true.

9)cursor的使用。不过要注意管理好cursor,不要每次打开关闭cursor.因为打开关闭Cursor非常耗时。Cursor.require用于刷cursor.

10)采用SurfaceView在子线程刷新UI,避免手势的处理和绘制在同一UI线程(普通View都这样做)

11)采用JNI,将耗时间的处理放到c/c++层来处理

12)有些能用文件操作的,尽量采用文件操作,文件操作的速度比数据库的操作要快10倍左右

13)懒加载和缓存机制。访问网络的耗时操作启动一个新线程来做,而不要再UI线程来做

14)如果方法用不到成员变量,可以把方法申明为static,性能会提高到15%到20%

15)避免使用getter/setter存取field,可以把field申明为public,直接访问

16)私有内部类要访问外部类的field或方法时,其成员变量不要用private,因为在编译时会生成setter/getter,影响性能。可以把外部类的field或方法声明为包访问权限

17)合理利用浮点数,浮点数比整型慢两倍

18)针对ListView的性能优化,ListView的背景色与cacheColorHint设置相同颜色,可以提高滑动时的渲染性能。ListView中getView是性能是关键,这里要尽可能的优化。

getView方法中要重用view;getView方法中不能做复杂的逻辑计算,特别是数据库操作,否则会严重影响滑动时的性能

19)不用new关键词创建类的实例,用new关键词创建类的实例时,构造函数链中的所有构造函数都会被自动调用。但如果一个对象实现了Cloneable接口,我们可以调用它的clone()方法。

clone()方法不会调用任何类构造函数。在使用设计模式(Design Pattern)的场合,如果用Factory模式创建对象,则改用clone()方法创建新的对象实例非常简单。例如,下面是Factory模式的一个典型实现:

20)public static Credit getNewCredit() {
return new Credit();
}
改进后的代码使用clone()方法,如下所示:
private static Credit BaseCredit = new Credit();
public static Credit getNewCredit() {
return (Credit) BaseCredit.clone();
}
上面的思路对于数组处理同样很有用。

21)乘法和除法

考虑下面的代码:

  • for (val = 0; val < 100000; val +=5) { alterX = val * 8; myResult = val * 2; }
    用移位操作替代乘法操作可以极大地提高性能。下面是修改后的代码:
    for (val = 0; val < 100000; val += 5) { alterX = val << 3; myResult = val << 1; }

  • 22)ViewPager同时缓存page数最好为最小值3,如果过多,那么第一次显示时,ViewPager所初始化的pager就会很多,这样pager累积渲染耗时就会增多,看起来就卡。

    23)每个pager应该只在显示时才加载网络或数据库(UserVisibleHint=true),最好不要预加载数据,以免造成浪费

    24)提高下载速度:要控制好同时下载的最大任务数,同时给InputStream再包一层缓冲流会更快(如BufferedInputStream)

    25)提供加载速度:让服务端提供不同分辨率的图片才是最好的解决方案。还有合理使用内存缓存,使用开源的框架

    引用:Android性能优化的浅谈

    B. android 性能优化有哪些办法

    性能优化的常用方法

    主要内容包括布局优化,绘制优化,内存泄露优化,相应速度优化,ListView优化,Bitmap优化,线程优化等,下面主要给你举了其中的几个例子:

    (1)布局优化

    布局优化的思想很简单,就是尽量减少布局文件的层级。

    如何进行优化呢?首先删除布局中无用的控件和层级,其次有选择地使用性能较低的ViewGroup,比如LinearLayout。如果布局中有的布局既可以用LinearLayout也可以用RelativeLayout,那就用LinearLayout,这是因为RelativeLayout比较复杂,他的布局过程花费更多的CPU时间。FrameLayout和LinearLayout一样都是一种简单高效的ViewGroup,因此可以考虑使用他们,但是很多时候,单纯的通过一个LinearLayout或者FrameLayout无法实现产品的效果,需要通过嵌套的方式来完成,这种情况建议采用RelativeLayout,因为ViewGroup的嵌套就相当于增加了布局的层级,同样会降低程序的性能。

    布局优化的另一种手段是采用<include>标枪,<merge>标签和ViewStub。<include>标签主要用于布局重用,<merge>标签一般和<include>配合使用,它可以减少布局的层级。而ViewStub则提供了按需加载功能,当需要时才将ViewStub中的布局加载到内存,这提高了程序的初始化效率。

    (2)绘制方法

    绘制优化是指View的onDraw方法避免执行大量的操作,这主要有两方面。

    首先,onDraw中不要创建新的布局对象,这是因为onDraw方法可能会被频繁调用,这样就会在一瞬间产生大量的临时对象,这不仅占用了过多的内存而且还会导致系统更加频繁的gc,降低了程序的执行效率。

    另一方面,onDraw方法中不要做耗时的任务,也不能执行成千上万次循环操作,尽管每次循环都很轻量级,但是大量的循环仍然十分抢占CPU的时间片,这会造成View的绘制过程不流畅。

    (3)内存泄露优化

    内存泄露在开发过程中是一个需要重视的问题,但是由于内存泄露问题对开发人员的经验和开发意识要求比较高,因此这是开发人员最容易犯的错误之一。内存泄露的优化分为两个方面,一方面是在开发过程中避免写出内存泄露的代码,另一方面通过一些分析工具比如MAT来找出潜在的内存泄露继而解决。

    关于性能优化的建议

    1.避免黄健过多对象;

    2.不要过多使用枚举,枚举占用的内存空间比整型大一些。

    3.常量使用staticfinal来修饰。

    4.使用一些Android特有的数据结构,比如SpareArray和Pair等,他们都具有更好的性能。

    5.适当使用软引用和弱引用。

    6.采用内存缓存和磁盘缓存

    7.尽量采用静态内部类,这样可以避免潜在的内部类而导致的内存泄漏。

    C. android应用测试哪些要点,如何进行测试的

    1、主要从应用的功能、应用兼容性进行测试,爱内测是专门测试app性能的工具;
    2、接着就是从android的不同版本和终端的分辨率出发,界面易用性测试;
    3、最后就是应用安全性测试,不同网络状态下的测试。

    D. android studio有哪些性能分析工具

    导言:
    Android应用在CPU占用,内存消耗方面的性能指标是影响产品质量的重要因素,由于QQ管家,360手机助手等应用都提供直观的内存消耗,流量监控功能,致使用户比以往更加关注软件的性能,并以此进行软件选用的决策。
    目前,已经有很多可以监控android app 性能的工具可以供开发人员使用,如:基于Eclipse插件体系的MAT,其通过生成.hprof文件对内存泄露情况进行排查;内存检测工具APT:提供CPU利用率实时曲线图,方便对比测试内存泄露问题[图0-1]

    E. 怎么样进行Android应用的性能分析

    对于手机应用性能可以从两方面关注:
    1.app产品做好之后必须从每个控件在国内不同的手机品牌和不同系统版本进行兼容性测试,业内也叫遍历测试,所谓的遍历测试是可以移动识别应用的控件从而进行多层次的运行测试,当中包含了安装测试,启动测试,控件遍历测试,最后是卸载测试!
    2.兼容性测试,也就是适配测试完成之后需要开始对网络性能进行测试,这里大概有几个方面需要进行的:网络性能测试,元素加载性能测试,网络可用性测试等等!
    国内现有的测试周期和测试手段都是通过人工化测试,真正实现自动化又节省时间与人力的只有借助第三方应用性能管理提供商才可以实现!

    F. 如何从技术上全面分析一款android app

    一、用户体验是王道

    1.这是一个看脸的时代,不论是人还是app。

    2.Android出现也已经是很长的一段时间了,各种技术相对比较成熟,开源社区里那些图片库、网络库、UI界面、数据框架一抓一大把,在同一个类别的应用中,如果没点干货真的很难脱颖而出。谁来判断干货,不是研发,不是pm,是用户。

    3.我现在的Leader之前跟我说过一句话,我深以为然--做一款app,其实最核心的是怎么获取到用户,怎么愿意让用户去使用你,而不是你应用内的技术怎么怎么牛B。不喜勿喷,其实我刚开始的时候也不能理解,但是后来逐渐领悟到他说的竟然是对的。对于移动互联网来说,app的生生死死真是太常见了,各个公司每年新开的项目一大片,真正能够活下来的又有几个。所以在应用的前期还是努力迭代功能,让自己的app活下去之后,再考虑技术的问题吧

    二、应用架构是否合理

    1.简单就一句话,不要重复造轮子,不要重复造轮子,尤其是不要在一个应用里反复造多个轮子。现在的软件开发早就过了单枪匹马闯天下的时代了,很多个研发同时工作,难免会造成各自代码不熟悉,这时候就需要有人能够将整个应用的架构能够捋清楚,千万不要出现项目中我用我的库方法,你用你的库方法,大家一起造轮子玩这种情况。

    2.能够使用开源库就从了他吧。还是那句话,别人造好的轮子,为嘛不用,非得自己造一个,真以为自己是全能吗?你不累我看着都累啊。

    三、内存、网络、界面性能响应优化

    其实大家都说过了软件性能的重要性,我在这里也就不再进行复述了,反正LeakCanary,TraceView等等性能工具,谁用谁知道。

    四、单元测试

    感觉国内好像很少有研发自己写单元测试的情况啊,其实我觉得很多时候,研发才是对功能最熟悉的人,很多边界条件只有在代码中才能够恰好遇到,所以写好单元测试做一只不麻烦QA的猿才是好猿。

    五、安全

    Sorry,我对应用安全不是很懂,就是简单用用Proguard混淆就Over了,加壳什么的感觉貌似没有太大必要,毕竟对于很多Android应用而言,其实看一眼大概知道他的界面逻辑了,ui层自己重写绝对比逆向快,而api接口之类的东西,或许是我不太敏感吧。

    G. Android开发中,有哪些好方法可以检测内存泄露和性能

    下面是回答的内容


    内存泄露,是Android开发者最头疼的事。可能一处小小的内存泄露,都可能是毁于千里之堤的蚁穴。怎么才能检测内存泄露呢?网上教程非常多,不过很多都是使用Eclipse检测的, 其实1.3版本以后的Android Studio 检测内存非常方便, 如果结合上MAT工具,LeakCanary插件,一切就变得so easy了。


    熟悉Android Studio界面工欲善其事,必先利其器。


    我们接下来先来熟悉下Android Studio的界面

    结果

    非独占时间:某函数占用的CPU时间,包含内部调用其它函数的CPU时间。
    独占时间:某函数占用CPU时间,但不含内部调用其它函数所占用的CPU时间。

    我们如何判断可能有问题的方法?

    通过方法的调用次数和独占时间来查看,通常判断方法是:

    如果方法调用次数不多,但每次调用却需要花费很长的时间的函数,可能会有问题。

    如果自身占用时间不长,但调用却非常频繁的函数也可能会有问题。

    综述

    上面给大家介绍了若干使用Android Studio检查程序性能的工具,工具永远是辅助,不要因为工具耽误太长时间。如果有问题,欢迎大家纠正。

    H. android性能测试需要哪些技术

    Monkey 就是SDK中附带的一个工具,该工具用于进行压力测试。 然后开发人员结合monkey 打印的日志 和系统打印的日志,结局测试中出现的问题。
    Monkey 测试,所有的事件都是随机产生的,不带任何人的主观性。
    1.标准的monkey 命令
    [adb shell] monkey [options] <eventcount> , 例如:
    adb shell monkey -v 500 产生500次随机事件,作用在系统中所有activity(其实也不是所有的activity,而是包含 Intent.CATEGORY_LAUNCHER 或Intent.CATEGORY_MONKEY 的activity)。
    上面只是一个简单的例子,实际情况中通常会有很多的options 选项。

    2:常用选项
    --help:打印帮助信息
    -v:指定打印信息的详细级别,一个 -v增加一个级别 , 默认级别为 0 。

    3.事件选项
    -s:指定产生随机事件种子值,相同的种子值产生相同的事件序列。如: -s 200
    --throttle:每个事件结束后的间隔时间——降低系统的压力(如不指定,系统会尽快的发送事件序列)。如:--throttle 100
    --pct-touch:指定触摸事件的百分比,如:--pct-touch 5% , 相关的还有以下option:
    --pct-motion <percent> (滑动事件)、 --pct-trackball <percent> (轨迹球事件) 、 --pct-nav <percent> (导航事件 up/down/left/right)、 --pct-majornav <percent> (主要导航事件 back key 、 menu key)、 --pct-syskeys <percent> (系统按键事件 Home 、Back 、startCall 、 endCall 、 volumeControl)、 --pct-appswitch <percent> (activity之间的切换)、 --pct-anyevent <percent>(任意事件)。

    4.约束选项
    -p:指定有效的package(如不指定,则对系统中所有package有效),一个-p 对应一个有效package, 如:-p com.ckt -p com.ckt.asura;
    -c:activity必须至少包含一个指定的category,才能被启动,否则启动不了。

    5.调试选项
    --dbg-no-events:初始化启动的activity,但是不产生任何事件。
    --hprof:指定该项后在事件序列发送前后会立即生成分析报告 —— 一般建议指定该项。
    --ignore-crashes:忽略崩溃
    --ignore-timeouts:忽略超时
    --ignore-security-exceptions:忽略安全异常
    --kill-process-after-error:发生错误后直接杀掉进程
    --monitor-native-crashes:跟踪本地方法的崩溃问题
    --wait-dbg:知道连接了调试器才执行monkey测试。

    6.一个简单的monkey命令:
    adb shell monkey -p com.xy.android.junit -s 500 -v 10000
    表示产生时间序列的种子值:500, 产生 10000个事件 。

    I. Android应用性能优化的内容简介

    今天的Android应用开发者经常要想尽办法来提升程序性能。由于应用越来越复杂,这个问题也变得越来越棘手。本书主要介绍如何快速高效地优化应用,让应用变得稳定高效。你将学会利用Android SDK和NDK来混合或单独使用Java、C/C++来开发应用。书中还特别讲解了如下内容:
    · 一些OpenGL的优化技术以及RenderScript(Android的新特性)的基础知识;
    · 利用SDK来优化应用的Java代码的技巧;
    · 通过高效使用内存来提升性能的技巧;
    · 延长电池使用时间的技巧;
    · 使用多线程的时机及技巧;
    · 评测剖析代码的技巧。
    把本书的内容学以致用,你的编程技术就会得到关键性的提升,写出的应用就会更为健壮高效,从而广受用户好评,并最终获得成功。
    目录
    第1章Java代码优化1.1Android如何执行代码1.2优化斐波纳契数列1.2.1从递归到迭代1.2.2BigInteger1.3缓存结果1.4API等级1.5数据结构1.6响应能力1.6.1推迟初始化1.6.2StrictMode1.7SQLite1.7.1SQLite语句1.7.2事务1.7.3查询
    第1章Java代码优化1.1Android如何执行代码1.2优化斐波纳契数列1.2.1从递归到迭代1.2.2BigInteger1.3缓存结果1.4API等级1.5数据结构1.6响应能力1.6.1推迟初始化1.6.2StrictMode1.7SQLite1.7.1SQLite语句1.7.2事务1.7.3查询1.8总结
    第2章NDK入门2.1NDK里有什么2.2混合使用Java和C/C++代码2.2.1声明本地方法2.2.2实现JNI粘合层2.2.3创建Makefile2.2.4实现本地函数2.2.5编译本地库2.2.6加载本地库2.3Application.mk2.3.1为(几乎)所有设备优化2.3.2支持所有设备2.4Android.mk2.5使用C/C++改进性能2.6本地Acitivity2.6.1构建缺失的库2.6.2替代方案2.7总结
    第3章NDK进阶3.1汇编3.1.1最大公约数3.1.2色彩转换3.1.3并行计算平均值3.1.4ARM指令3.1.5ARM NEON3.1.6CPU特性3.2C扩展3.2.1内置函数3.2.2向量指令3.3技巧3.3.1内联函数3.3.2循环展开3.3.3内存预读取3.3.4用LDM/STM替换LDR/STD3.4总结
    第4章高效使用内存4.1说说内存4.2数据类型4.2.1值的比较4.2.2其他算法4.2.3数组排序4.2.4定义自己的类4.3访问内存4.4排布数据4.5垃圾收集4.5.1内存泄漏4.5.2引用4.6API4.7内存少的时候4.8总结
    第5章多线程和同步5.1线程5.2AsyncTask5.3Handler和Looper5.3.1Handler5.3.2Looper5.4数据类型5.5并发5.6多核5.6.1为多核修改算法5.6.2使用并发缓存5.7Activity生命周期5.7.1传递信息5.7.2记住状态5.8总结
    第6章性能评测和剖析6.1时间测量6.1.1System.nanoTime()6.1.2Debug.threadCpuTimeNanos()6.2方法调用跟踪6.2.1Debug.startMethodTracing()6.2.2使用Traceview工具6.2.3DDMS中的Traceview6.2.4本地方法跟踪6.3日志6.4总结
    第7章延长电池续航时间7.1电池7.2禁用广播接收器7.3网络7.3.1后台数据7.3.2数据传输7.4位置7.4.1注销监听器7.4.2更新频率7.4.3多种位置服务7.4.4筛选定位服务7.4.5最后已知位置7.5传感器7.6图形7.7提醒7.8WakeLock7.9总结
    第8章图形8.1布局优化8.1.1相对布局8.1.2合并布局8.1.3重用布局8.1.4ViewStub8.2布局工具8.2.1层级视图8.2.2layoutopt8.3OpenGL ES8.3.1扩展8.3.2纹理压缩8.3.3Mipmap8.3.4多APK8.3.5着色8.3.6场景复杂性8.3.7消隐8.3.8渲染模式8.3.9功耗管理8.4总结
    第9章RenderScript9.1概览9.2Hello World9.3Hello Rendering9.3.1创建渲染脚本9.3.2创建RenderScriptGL Context9.3.3展开RSSurfaceView9.3.4设置内容视图9.4在脚本中添加变量9.5HelloCompute9.5.1Allocation9.5.2rsForEach9.5.3性能9.6自带的RenderScript API9.6.1rs_types.rsh9.6.2rs_core.rsh9.6.3rs_cl.rsh9.6.4rs_math.rsh9.6.5rs_graphics.rsh9.6.6rs_time.rsh9.6.7rs_atomic.rsh9.7RenderScript与NDK对比9.8总结

    J. 如何对Android手机 进行 多媒体性能测试 呢

    所谓的多媒体就是指图片,声音和视频对么?
    买手机前准备几张颜色比较鲜艳,分辩率比较高的图片,放在手机上看效果,注意看手机屏幕显示的色块多不多,色块太多的话证明屏幕的可显示颜色较低.再就是分辩率,现在的手机都会给出很具体的参数,其实直接看参数就可以了,不用这么纠结的.如果还是不放心的话,检查手机时就把仔细地检查屏幕,看显示的颗粒感强不强,一般400*800以上的分辩率肉眼已经很难看出颗粒感了.
    检查声音的道理跟上面差不多,准备一两首音质比较高的mp3或者其他格式的音频,在手机上播放,包括耳机和外放.
    视频也如上,不再码字.
    如果信不过自己的眼睛的话还可以用Aurora Softworks和Quadrant这两个软件进行直观的测试.跑完后直接看分数就OK了

    阅读全文

    与android应用性能分析相关的资料

    热点内容
    程序员罗技 浏览:180
    软考初级程序员课程2021下载 浏览:487
    杭州程序员奶奶 浏览:878
    不听命令造成错误 浏览:979
    kool系统源码 浏览:608
    流氓app在哪里看 浏览:98
    域名购买了怎么指向服务器 浏览:121
    安卓手机如何让照片颜色反转 浏览:859
    怎么下载卓睿安手机版 浏览:514
    h3crange命令 浏览:468
    php前景和python 浏览:338
    php压缩图片内存大小 浏览:495
    在哪里可以查看云服务器的信息 浏览:70
    python读取非txt文件 浏览:799
    艾莫迅用什么编程软件好 浏览:227
    android文件存储读取 浏览:214
    php基础教程第5版 浏览:543
    服务器里面怎么刷东西 浏览:194
    荣耀手机如何快速把app切换页面 浏览:798
    傻瓜式php源码 浏览:359