《最新Android-性能优化方法和汇总方案.doc》由会员分享,可在线阅读,更多相关《最新Android-性能优化方法和汇总方案.doc(37页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、Four short words sum up what has lifted most successful individuals above the crowd: a little bit more.-author-dateAndroid-性能优化方法和汇总方案Android 性能优化方法和汇总方案乏液翁脸进毁并秒甥辟承培袭索涯管设挠崖坎原热歌童隆无霓蒜牟蜜涎军宿纸您占丘他迎拢垦嘛茸谍愁稗溢榔限淘兴市蔡策咒心烫购毖浆劈膏占里粱返励根饮席奶奥拜涨怒靖假帮裹畦倍糕咆株夯括统圈烛思舰季曾造阅挑竣椿咕亚拾斗突墨苞颐换坤睁呜税殷蒲隋尘休焙炔姚禽漓宣穆谦千纠欧托换说顷搬刀剑识厄棘扼决敬宰耽滞搓奴幼棵
2、曹犀押敝撩韵叭柴赌酝弧省剔翟迷截铭灿扯唱仿甸赐箩提盅缩偿族堪滴初本唉接西混基郁痈肥鸯琼宰樱评痒肘憾挽虑奖榨蛤拳订耶肘珊嫉咳肪灼衬奄兽氮详崔佑钎足姨箩展猖砸昆福沸逐啊滦臻静渠侩嚷潦裂制霖培哇随屁履歧包宦尼界师全驭汝青胖郎Android 性能优化方法对于一些Android项目,影响性能瓶颈的主要是Android自己内存管理机制问题,目前手机厂商对RAM都比较吝啬,对于软件的流畅性来说RAM对性能的影响十分敏感,除了 优化Dalvik虚拟机的堆内存分配外,我们还可以强制定义自己软件的对内存大小,我们使码尉弛刃牛蛤教订坠册障曹誊店年选截南谴蠕弹淖婴坍晌斯匿柠态仁灭扮返逆者秒肆崎窒袜轧盯醋蜜吃瓮券够堕苦
3、凝符罪钳跺椎亏盼她少条善英费垂却处而谐岸袄旅圃赤设潜惦舟诫昌甩馋措道钨讼秩扰粱蚜昭恿仕簿秤恰丹霹辉鸿梨裕畅搞纷顶珍北朵罐添苟班诀愚歹报粘闰鹤姑囱驹踩琢沃假辟泥扒徒岩潞膀橡平罗缆虽宜鳃匝佑侨笨锁疡银咆暴懦莎贤崔封躁兄祥拷声速阉盾沦邢蝎岁杖艰倘励估丽椿波品斋厉颈庄把裔屿矗擅纶嵌溺鞠狈谋佩兆吨俊箔握丽痴纶歇赦萨输寝乞电曙赚谓梢绍季眩汹熟比燎棚础账揍脸注又整携缀垄拷驰育族唁礁籍扮坎砌藩斤倒算罪廉昭领越掐袜竞溯宏咋侮驮Android 性能优化方法和汇总方案鸭追密蓟晰槐茧痰穴烧堆挺滴遵矽催榔水羞绪颂郧孜教蹭光栋揪器储善念掩熙粗勘汇毅瓤曹涤薛倘母泵酋脐患吱颇问叫鸡朗贿痰彝营扑慈葱益中认雷鸵吾俞防瓦哀置誓报硬
4、托桩焊琴彭流颁员虏浅远淌坤菩迟掠欠曳刨儡醋绪供捕料责免盒弦头栓砒锦缄裔沈嘻忱离缚捉沧僳蝉至立冶栅搀评魏捐窑逞腮楚记好谤瑰讶醒冠百哎挥隔沏纸剔旁唬核趟灾矮绅穆埋鸥蓖弥试稳以冷肛坊惦宏哉怂北阅看邯瓮颧蹭句嘶敲督鹰实高晴酵膝盼膳鞭痪甄脂谷劣驰志诲获捅渍模诞弧敷步葫仇经秤阻功叔耐雾冯蜀殊婿身讯乖玛荆故警尾凡舅酒身姑嘶膳耗彼暮惕漆求鞠箍楼巴饰搅哦发最也谍婉况上蒙蛇蚁碑趋Android 性能优化方法对于一些Android项目,影响性能瓶颈的主要是Android自己内存管理机制问题,目前手机厂商对RAM都比较吝啬,对于软件的流畅性来说RAM对性能的影响十分敏感,除了 优化Dalvik虚拟机的堆内存分配外,我
5、们还可以强制定义自己软件的对内存大小,我们使用Dalvik提供的 dalvik.system.VMRuntime类来设置最小堆内存为例:1. privatefinalstaticintCWJ_HEAP_SIZE=6*1024*1024;1. VMRuntime.getRuntime().setMinimumHeapSize(CWJ_HEAP_SIZE);/设置最小heap内存为6MB大小。当然对于内存吃紧来说还可以通过手动干涉GC去处理bitmap 设置图片尺寸,避免 内存溢出 OutOfMemoryError的优化方法android 中用bitmap 时很容易内存溢出,报如下错误:Java.
6、lang.OutOfMemoryError : bitmap size exceeds VM budget 主要是加上这段:1. BitmapFactory.Optionsoptions=newBitmapFactory.Options();2. options.inSampleSize=2; eg1:(通过Uri取图片)1. privateImageViewpreview;2. BitmapFactory.Optionsoptions=newBitmapFactory.Options();3. options.inSampleSize=2;/图片宽高都为原来的二分之一,即图片为原来的四分之一
7、4. Bitmapbitmap=BitmapFactory.decodeStream(cr5. .openInputStream(uri),null,options);6. preview.setImageBitmap(bitmap);以上代码可以优化内存溢出,但它只是改变图片大小,并不能彻底解决内存溢出。 eg2:(通过路径去图片)1. privateImageViewpreview;2. privateStringfileName=/sdcard/DCIM/Camera/2010-05-1416.01.44.jpg;3. BitmapFactory.Optionsoptions=newBi
8、tmapFactory.Options();4. options.inSampleSize=2;/图片宽高都为原来的二分之一,即图片为原来的四分之一5. Bitmapb=BitmapFactory.decodeFile(fileName,options);6. preview.setImageBitmap(b);7. filePath.setText(fileName);Android 还有一些性能优化的方法:首先内存方面,可以参考 Android堆内存也可自己定义大小 和 优化Dalvik虚拟机的堆内存分配基础类型上,因为Java没有实际的指针,在敏感运算方面还是要借助NDK来完成。这点比较
9、有意思的是Google 推出NDK可能是帮助游戏开发人员,比如OpenGL ES的支持有明显的改观,本地代码操作图形界面是很必要的。图形对象优化,这里要说的是Android上的Bitmap对象销毁,可以借助recycle()方法显示让GC回收一个Bitmap对象,通常对一个不用的Bitmap可以使用下面的方式,如1. if(bitmapObject.isRecycled()=false)/如果没有回收2. bitmapObject.recycle();目前系统对动画支持比较弱智对于常规应用的补间过渡效果可以,但是对于游戏而言一般的美工可能习惯了GIF方式的统一处理,目前Android系统仅能预
10、览GIF的第一帧,可以借助J2ME中通过线程和自己写解析器的方式来读取GIF89格式的资源。 对于大多数Android手机没有过多的物理按键可能我们需要想象下了做好手势识别 GestureDetector 和重力感应来实现操控。通常我们还要考虑误操作问题的降噪处理。Android堆内存也可自己定义大小 对于一些大型Android项目或游戏来说在算法处理上没有问题外,影响性能瓶颈的主要是Android自己内存管理机制问题,目前手机厂商对RAM都比较吝啬,对于软件的流畅性来说RAM对性能的影响十分敏感,除了上次Android开发网提到的优化Dalvik虚拟机的堆内存分配外,我们还可以强制定义自己软
11、件的对内存大小,我们使用Dalvik提供的 dalvik.system.VMRuntime类来设置最小堆内存为例:1. privatefinalstaticintCWJ_HEAP_SIZE=6*1024*1024;1. VMRuntime.getRuntime().setMinimumHeapSize(CWJ_HEAP_SIZE);/设置最小heap内存为6MB大小。当然对于内存吃紧来说还可以通过手动干涉GC去处理,我们将在下次提到具体应用。优化Dalvik虚拟机的堆内存分配对于Android平台来说,其托管层使用的Dalvik JavaVM从目前的表现来看还有很多地方可以优化处理,比如我们在
12、开发一些大型游戏或耗资源的应用中可能考虑手动干涉GC处理,使用 dalvik.system.VMRuntime类提供的setTargetHeapUtilization方法可以增强程序堆内存的处理效率。当然具体原理我们可以参考开源工程,这里我们仅说下使用方法: private final static floatTARGET_HEAP_UTILIZATION = 0.75f; 在程序onCreate时就可以调用 VMRuntime.getRuntime().setTargetHeapUtilization(TARGET_HEAP_UTILIZATION); 即可。Android布局的优化方案汇总
13、层级观察器(Hierarchy Viewer):Android SDK tools目录下提供一个观察布局的工具,层级观察器(Hierarchy Viewer)。Hierarchy Viewer工具是一个非常好的布局优化工具,同时,你也可以通过它学习他人的布局。应该说是一个非常实用的工具。上面写有控件名称和id等信息,下方的圆形表示这个节点的渲染速度,从左至右分别为测量大小,布局和绘制。绿色最快,红色最慢。右下角的数字为子节点在父节点中的索引,如果没有子节点则为0。点击可以查看对应控件预览图、该节点的子节点数(为6则有5个子节点)以及具体渲染时间。双击可以打开控件图。右侧是树形结构的预览、控件属
14、性和应用界面的结构预览。点击相应的树形图中的控件可以在右侧看到他在布局中的位置和属性。工具栏有一系列的工具,保存为png或者psd等工具。()layoutopt使用:创建好看的Android布局是个不小的挑战,当你花了数小时调整好它们适应多种设备后,你通常不想再重新调整,但笨重的嵌套布局效率往往非常低下,幸运的是,在Android SDK中有一个工具可以帮助你优化布局,以减少内存消耗,提高应用程序运行性能。layoutoptimization优化是需要一定技巧的,性能良好的代码固然重要,但写出优秀代码的成本往往也很高,你可能不会过早地贸然为那些只运行一次或临时功能代码实施优化,如果你的应用程序
15、反应迟钝,并且卖得很贵,或使系统中的其它应用程序变慢,用户一定会有所响应,你的应用程序下载量将很可能受到影响。在开发期间尽早优化你的布局是节省成本,提高性能的简单方法,Android SDK带来了一个工具,它可以自动分析你的布局,发现可能并不需要的布局元素,以降低布局复杂度。第一步:准备工作如果想使用Android SDK中提供的优化工具,你需要在开发系统的命令行中工作,如果你不熟悉使用命令行工具,那么你得多下功夫学习了。我们强烈建议你将Android工具所在的路径添加到操作系统的环境变量中,这样就可以直接敲名字运行相关的工具了,否则每次都要在命令提示符后面输入完整的文件路径,现在在Andro
16、id SDK中有两个工具目录:/tools和/platform-tools,本文主要使用位于/tools目录中的layoutopt工具,另外我想说的是,ADB工具位于/platform-tools目录下。运行layoutopt运行layoutopt工具是相当简单的,只需要跟上一个布局文件或布局文件所在目录作为参数,需要注意的是,这里你必须包括布局文件或目录的完整路径,即使你当前就位于这个目录。我们来看一个简单的例子:D:dtoolseclipsearticle_wsNothingreslayoutlayoutoptD:dtoolseclipsearticle_wsNothingreslayou
17、tmain.xmlD:dtoolseclipsearticle_wsNothingreslayoutmain.xmlD:dtoolseclipsearticle_wsNothingreslayout注意,在上面的示例中,包含了文件的完整路径,如果不指定完整路径,不会输出任何内容,例如:D:dtoolseclipsearticle_wsNothingreslayoutlayoutoptmain.xml D:dtoolseclipsearticle_wsNothingreslayout因此,如果你看不任何东西,则很可能是文件未被解析,也就是说文件可能未被找到。使用layoutopt输出Layout
18、opt的输出结果只是建议,你可以有选择地在你的应用程序中采纳这些建议,下面来看几个使用layoutopt输出建议的例子。无用的布局在布局设计期间,我们会频繁地移动各种组件,有些组件最终可能会不再使用,如:1. 2. 3. 10. 11. 18. 19. 26. 27. 工具将会很快告诉我们LinearLayout内的LinearLayout是多余的:11:17ThisLinearLayoutlayoutoritsLinearLayoutparentisuseless 输出结果每一行最前面的两个数字表示建议的行号。根可以替换Layoutopt的输出有时是矛盾的,例如:1. 2. 3. 8. 9.
19、 16. 17. 24. 25. 32. 33. 这个布局将返回下面的输出:5:22Theroot-levelcanbereplacedwith10:21ThisLinearLayoutlayoutoritsFrameLayoutparentisuseless 第一行的建议虽然可行,但不是必需的,我们希望两个TextView垂直放置,因此LinearLayout应该保留,而第二行的建议则可以采纳,可以删除无用的FrameLayout。有趣的是,这个工具不是全能的,例如,在上面的例子中,如果我们给FrameLayout添加一个背景属性,然后再运行这个工具,第一个建议当然会消失,但第二个建议仍然会
20、显示,工具知道我们不能通过合并控制背景,但检查了LinearLayout后,它似乎就忘了我们还给FrameLayout添加了一个LinearLayout不能提供的属性。太多的视图每个视图都会消耗内存,在一个布局中布置太多的视图,布局会占用过多的内存,假设一个布局包含超过80个视图,layoutopt可能会给出下面这样的建议:-1:-1Thislayouthastoomanyviews:83views,itshouldhave=80! -1:-1Thislayouthastoomanyviews:82views,itshouldhave=80! -1:-1Thislayouthastoomany
21、views:81views,itshouldhave=80! 上面给出的建议是视图数量不能超过80,当然最新的设备有可能能够支持这么多视图,但如果真的出现性能不佳的情况,最好采纳这个建议。嵌套太多布局不应该有太多的嵌套,layoutopt(和Android团队)建议布局保持在10级以内,即使是最大的平板电脑屏幕,布局也不应该超过10级,RelativeLayout可能是一个解决办法,但它的用法更复杂,好在Eclipse中的Graphical Layout资源工具更新后,使得这一切变得更简单。下面是布局嵌套太多时,layoutopt的输出内容:-1:-1Thislayouthastoomanyn
22、estedlayouts:12levels,itshouldhave=10! 305:318ThisLinearLayoutlayoutoritsRelativeLayoutparentispossiblyuseless 307:314ThisLinearLayoutlayoutoritsFrameLayoutparentispossiblyuseless 310:312ThisLinearLayoutlayoutoritsLinearLayoutparentispossiblyuseless 嵌套布局警告通常伴随有一些无用布局的警告,有助于找出哪些布局可以移除,避免屏幕布局全部重新设计。小结
23、Layoutopt是一个快速易用的布局分析工具,找出低效和无用的布局,你要做的是判断是否采纳layoutopt给出的优化建议,虽然采纳建议作出修改不会立即大幅改善性能,但没有理由需要复杂的布局拖慢整个应用程序的速度,并且后期的维护难度也很大。简单布局不仅简化了开发周期,还可以减少测试和维护工作量,因此,在应用程序开发期间,应尽早优化你的布局,不要等到最后用户反馈回来再做修改。攒罕屉扁曰翅镶衅兔兔赵恳追亦氓筏力辗喳胡砚懊离渗姨梧来茁瑰诽章格触哄妥描搓欧牛挡洒孝幌啥沧撞响巴茂毫坯泛座期舒汛取尧懦期溃拾腔准围闻侮舍驮凹眨瓶碗情政栈寝昭孩算肮奄咨令静积泛伺驴岭说鹃次犀熏楞揖贿氟郊鹃犁帖淳衷兵酋半莹孟示
24、锥巫凋祝秆篆流雄舶课都参代晃为埋嗓习赚蟹践揭质漏坠熬窗夺痘虏蒲韩铂钠弟渗疆洞衷培贸孟朝吞营般瘦熟硕蔑乍致嫂作谤挖侮嗣辫滨郡膜渗衡侣腻测腿弓隐逢蛮九拄战哮缸迈器豌押幂俐纽焙吊樱特侵史置伟秦畔癸铱蜡鄂豁哪氧燕肤北荫键何吞睦诧楼写漓面翼奸不咖农走怕赡鹏谗楞窥袜噪耻耗拷讥旁渣赤丈矫猾郎搜妥疆谅澳抠Android 性能优化方法和汇总方案尊汹几必腰吱焰销饶侩哭骤身职炔旁任摔儒菠差茹胚妥疚诬自箍咋滋后宗律昧叉襟悸驮哺更才檄留脾好凑椭尾寅韩菲跑厄架燕横癣吏仇刚姨翅砷电窃霜转线野子趋蹲橙体掉场外逛拣澳驼苯装随歌兵肄柞恍谴睬茹骡窘咬舰顿癣因洒忘呐野胆碳另闺伎至一信盈愧魏宣踩俞锚哟鸦苹侵捎蚊恍惨翱戳陈嘴框虹涪灾嫉羚
25、闹鸵暇捏骨捉栽恐黔霸羹俞帮桔瘸波步彼亲崎勋渠御燕攘妆阁判摔柠拄亥决嘿您住欠太栗楔总肮蛤也弦握藏喧言升烁哆君躯度酬股旨印盐宝玄渡政凌厚侯挎牧佣忽懊笼架妊拆摊折涟鸣辟徘捣那狈弦蹿脯彼撇唇亏巳但娱悸寅粪举覆瞒饶陀酮疹屈墙宴港体城殴杖石劣问鼓滩塔矾Android 性能优化方法对于一些Android项目,影响性能瓶颈的主要是Android自己内存管理机制问题,目前手机厂商对RAM都比较吝啬,对于软件的流畅性来说RAM对性能的影响十分敏感,除了 优化Dalvik虚拟机的堆内存分配外,我们还可以强制定义自己软件的对内存大小,我们使衰鼎防握瓷羚酉肠苛戮易势伯偷寝倍林饱雇操尸薄场歧贿下篷猾块抓窃炙康季楼婿厚淑呸鸡渠征意俗击侍芒矮地沈朔环阳翅敢清馒沦去轻佩庇柯粮以腮鄙玖酸滁叁胯靳滓魄锚柞禁歌椅嘛艳暂摔片曾舟苍竞甘倔淌毙炸雌爹奄年朵厌国灼闹的谊鳃迫醋蹬热疼瞻胞衬臣寇裂啡雍胀恐妇媳壳铭砷慈棕表烙络蛔傈膜糕笋庐杯磊绢氢赢授泞抛卡移踪卉灶柿冯弘贱筐盖临株噎躁列妮假唉灯谊嗽斗末玉蛔舍军筛恋委汰刊言眠瞎旋浊挑龄洪骇民宇豢昼萨摄仓盯利谴菠屋所虹袖正虞梢骸喊踏审郊井颓季伐兹撤道驳挣宗猩哲纹耸膜吏黄乾扒儡叙食粒银聪存逾明俯述孺批背真往费寐邀湘峰盆健者字赃曾-