版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
实用标准文案Android 性能优化方法对于一些Android 项目,影响性能瓶颈的主要是 Android 自己内存管理机制问题,目前手机厂商对 RAM都比较吝啬,对于软件的流畅性来说 RAM对性能的影响十分敏感,除了优化Dalvik 虚拟机的堆内存分配外, 我们还可以强制定义自己软件的对内存大小, 我们使用Dalvik 提供的 类来设置最小堆内存为例 :1. private final static intCWJ_HEAP_SIZE= 6*1024*1024;VMRuntime.getRuntime().setMinimumHeapSize(CWJ_HEAP_SIZE);//设置最小heap内存为6MB大小。当然对于内存吃紧来说还可以通过手动干涉 GC去处理bitmap 设置图片尺寸,避免 内存溢出 OutOfMemoryError 的优化方法★android 中用bitmap 时很容易内存溢出,报如下错误:bitmapsizeexceedsVMbudget精彩文档实用标准文案●主要是加上这段:1.BitmapFactory.Optionsoptions=newBitmapFactory.Options();2.options.inSampleSize=2;eg1:(通过Uri取图片)1.privateImageViewpreview;2.BitmapFactory.Optionsoptions=newBitmapFactory.Options();3.options.inSampleSize=2;//图片宽高都为原来的二分之一,即图片为原来的四分之一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=newBitmapFactory.Options();4.options.inSampleSize=2;//图片宽高都为原来的二分之一,即图片为原来的四分之一5.Bitmapb=BitmapFactory.decodeFile(fileName,options);6.preview.setImageBitmap(b);7.filePath.setText(fileName);精彩文档实用标准文案★Android 还有一些性能优化的方法:●首先内存方面,可以参考 Android 堆内存也可自己定义大小 和优化Dalvik 虚拟机的堆内存分配●基础类型上,因为 Java没有实际的指针,在敏感运算方面还是要借助 NDK来完成。这点比较有意思的是 Google 推出NDK可能是帮助游戏开发人员, 比如OpenGLES 的支持有明显的改观,本地代码操作图形界面是很必要的。●图形对象优化,这里要说的是 Android 上的Bitmap 对象销毁,可以借助 recycle()方法显示让GC回收一个 Bitmap 对象,通常对一个不用的 Bitmap 可以使用下面的方式,如1. if(bitmapObject.isRecycled()== false)//如果没有回收bitmapObject.recycle();●目前系统对动画支持比较弱智对于常规应用的补间过渡效果可以,但是对于游戏而言一般的美工可能习惯了 GIF方式的统一处理,目前 Android 系统仅能预览 GIF的第一帧,可以借助J2ME中通过线程和自己写解析器的方式来读取 GIF89格式的资源。精彩文档实用标准文案●对于大多数 Android 手机没有过多的物理按键可能我们需要想象下了做好手势识别GestureDetector 和重力感应来实现操控。通常我们还要考虑误操作问题的降噪处理。Android 堆内存也可自己定义大小对于一些大型 Android 项目或游戏来说在算法处理上没有问题外,影响性能瓶颈的主要是Android 自己内存管理机制问题,目前手机厂商对 RAM都比较吝啬,对于软件的流畅性来说RAM对性能的影响十分敏感,除了上次 Android 开发网提到的优化 Dalvik 虚拟机的堆内存分配外,我们还可以强制定义自己软件的对内存大小,我们使用 Dalvik 提供的 类来设置最小堆内存为例 :1. private final static intCWJ_HEAP_SIZE= 6*1024*1024;VMRuntime.getRuntime().setMinimumHeapSize(CWJ_HEAP_SIZE);//设置最小heap内存为6MB大小。当然对于内存吃紧来说还可以通过手动干涉 GC去处理,我们将在下次提到具体应用。优化Dalvik 虚拟机的堆内存分配精彩文档实用标准文案对于Android 平台来说,其托管层使用的 DalvikJavaVM 从目前的表现来看还有很多地方可以优化处理,比如我们在开发一些大型游戏或耗资源的应用中可能考虑手动干涉 GC处理,使用 类提供的 setTargetHeapUtilization 方法可以增强程序堆内存的处理效率。当然具体原理我们可以参考开源工程,这里我们仅说下使用方法: privatefinalstaticfloatTARGET_HEAP_UTILIZATION=0.75f; 在程序onCreate时就可以调用VMRuntime.getRuntime().setTargetHeapUtilization(TARGET_HEAP_UTILIZATION);即可。Android 布局的优化方案汇总层级观察器(HierarchyViewer) :AndroidSDKtools 目录下提供一个观察布局的工具,层级观察器 (HierarchyViewer)。HierarchyViewer 工具是一个非常好的布局优化工具, 同时,你也可以通过它学习他人的布局。应该说是一个非常实用的工具。上面写有控件名称和 id等信息,下方的圆形表示这个节点的渲染速度,从左至右分别为测量大小,布局和绘制。绿色最快,红色最慢。右下角的数字为子节点在父节点中的索引,如果没有子节点则为 0。点击可以查看对应控件预览图、该节点的子节点数(为 6则有5个子节点)以及具体渲染时间。 双击可以打开控件图。右侧是树形结构的预览、控件属性和应用界面的结构预览。点击相应的树形图中的控件可以在右侧看到他在布局中的位置和属精彩文档实用标准文案性。工具栏有一系列的工具,保存为 png或者psd等工具。( )layoutopt 使用:创建好看的 Android 布局是个不小的挑战,当你花了数小时调整好它们适应多种设备后,你通常不想再重新调整, 但笨重的嵌套布局效率往往非常低下, 幸运的是,在AndroidSDK中有一个工具可以帮助你优化布局,以减少内存消耗,提高应用程序运行性能。layoutoptimization优化是需要一定技巧的, 性能良好的代码固然重要, 但写出优秀代码的成本往往也很高,你可能不会过早地贸然为那些只运行一次或临时功能代码实施优化, 如果你的应用程序反应迟钝,并且卖得很贵,或使系统中的其它应用程序变慢, 用户一定会有所响应,你的应用程序下载量将很可能受到影响。在开发期间尽早优化你的布局是节省成本,提高性能的简单方法, AndroidSDK 带来了一个工具,它可以自动分析你的布局, 发现可能并不需要的布局元素, 以降低布局复杂度。第一步:准备工作如果想使用 AndroidSDK 中提供的优化工具,你需要在开发系统的命令行中工作,如果你不熟悉使用命令行工具,那么你得多下功夫学习了。我们强烈建议你将 Android 工具所在的路径添加到操作系统的环境变量中,这样就可以直接敲名字运行相关的工具了, 否则每次都要在命令提示符后面输入完整的文件路径, 现精彩文档实用标准文案在在AndroidSDK 中有两个工具目录:/tools 和/platform-tools ,本文主要使用位于 /tools目录中的 layoutopt 工具,另外我想说的是, ADB工具位于/platform-tools 目录下。运行layoutopt运行layoutopt 工具是相当简单的,只需要跟上一个布局文件或布局文件所在目录作为参数,需要注意的是,这里你必须包括布局文件或目录的完整路径, 即使你当前就位于这个目录。我们来看一个简单的例子:D:\d\tools\eclipse\article_ws\Nothing\res\layout>layoutoptD:\d\tools\eclipse\article_ws\Nothing\res\layout\main.xmlD:\d\tools\eclipse\article_ws\Nothing\res\layout\main.xmlD:\d\tools\eclipse\article_ws\Nothing\res\layout>注意,在上面的示例中, 包含了文件的完整路径, 如果不指定完整路径,不会输出任何内容,例如:D:\d\tools\eclipse\article_ws\Nothing\res\layout>layoutoptmain.xml D:\d\tools\eclipse\article_ws\Nothing\res\layout>因此,如果你看不任何东西,则很可能是文件未被解析,也就是说文件可能未被找到。使用layoutopt 输出Layoutopt 的输出结果只是建议,你可以有选择地在你的应用程序中采纳这些建议,下面来看几个使用 layoutopt 输出建议的例子。无用的布局精彩文档实用标准文案在布局设计期间,我们会频繁地移动各种组件,有些组件最终可能会不再使用,如:1.<?xmlversion="1.0"encoding="utf-8"?>2.3.<LinearLayoutxmlns:android="/apk/res/android"4.5.android:layout_width="match_parent"6.7.android:layout_height="match_parent"8.9.android:orientation="horizontal">10.11.<LinearLayoutandroid:id="@+id/linearLayout1"12.13.android:layout_height="wrap_content"14.15.android:layout_width="wrap_content"16.17.android:orientation="vertical">18.19.<TextViewandroid:id="@+id/textView1"20.21.android:layout_width="wrap_content"22.23.android:text="TextView"24.25.android:layout_height="wrap_content"></TextView>26.</LinearLayout></LinearLayout>工具将会很快告诉我们 LinearLayout 内的LinearLayout 是多余的:11:17ThisLinearLayoutlayoutoritsLinearLayoutparentisuseless输出结果每一行最前面的两个数字表示建议的行号。精彩文档实用标准文案根可以替换Layoutopt 的输出有时是矛盾的,例如:1.<?xmlversion="1.0"encoding="utf-8"?>2.3.<FrameLayoutxmlns:android="/apk/res/android"4.5.android:layout_width="match_parent"6.7.android:layout_height="match_parent">8.9.<LinearLayoutandroid:id="@+id/linearLayout1"10.11.android:layout_height="wrap_content"12.13.android:layout_width="wrap_content"14.15.android:orientation="vertical">16.17.<TextViewandroid:id="@+id/textView1"18.19.android:layout_width="wrap_content"20.21.android:text="TextView"22.23.android:layout_height="wrap_content"></TextView>24.25.<TextViewandroid:text="TextView"26.android:id="@+id/textView2"29.android:layout_width="wrap_content"30.31.android:layout_height="wrap_content"></TextView>32.</LinearLayout></FrameLayout>精彩文档实用标准文案这个布局将返回下面的输出:5:22Theroot-level<FrameLayout/>canbereplacedwith<merge/>10:21ThisLinearLayoutlayoutoritsFrameLayoutparentisuseless第一行的建议虽然可行,但不是必需的,我们希望两个 TextView 垂直放置,因此LinearLayout 应该保留,而第二行的建议则可以采纳,可以删除无用的 FrameLayout 。有趣的是,这个工具不是全能的,例如,在上面的例子中,如果我们给 FrameLayout添加一个背景属性, 然后再运行这个工具, 第一个建议当然会消失, 但第二个建议仍然会显示,工具知道我们不能通过合并控制背景,但检查了 LinearLayout 后,它似乎就忘了我们还给FrameLayout 添加了一个 LinearLayout 不能提供的属性。太多的视图每个视图都会消耗内存, 在一个布局中布置太多的视图, 布局会占用过多的内存, 假设一个布局包含超过 80个视图,layoutopt 可能会给出下面这样的建议:-1:-1Thislayouthastoomanyviews:83views,itshouldhave<=80! -1:-1Thislayouthastoomanyviews:82views,itshouldhave<=80! -1:-1Thislayouthastoomanyviews:81views,itshouldhave<=80!上面给出的建议是视图数量不能超过 80,当然最新的设备有可能能够支持这么多视图,但如果真的出现性能不佳的情况,最好采纳这个建议。嵌套太多精彩文档实用标准文案布局不应该有太多的嵌套, layoutopt
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年新型钢构材料采购与施工劳务分包合同范本
- 二零二五年全新微商佣金分成合同范本下载3篇
- 2025年度汽车租赁合同电子版范本8篇
- 2025年度短视频拍摄制作合同样本4篇
- 二零二五年度历史文化街区风貌改造合同4篇
- 二零二五年度殡仪馆鲜花礼仪用品采购及配送合同3篇
- 2025年度农药市场准入许可申请代理服务合同3篇
- 2025版环保型建筑材料供应与施工合同4篇
- 二零二五年度木门行业品牌推广采购合同3篇
- 二零二五年度城乡汽车租赁及售后服务合同
- (正式版)SJT 11449-2024 集中空调电子计费信息系统工程技术规范
- 广州绿色金融发展现状及对策的研究
- 《近现代史》义和团运动
- 人教版四年级上册加减乘除四则混合运算300题及答案
- 合成生物学技术在生物制药中的应用
- 消化系统疾病的负性情绪与心理护理
- 高考语文文学类阅读分类训练:戏剧类(含答案)
- 协会监事会工作报告大全(12篇)
- 灰坝施工组织设计
- WS-T 813-2023 手术部位标识标准
- 同意更改小孩名字协议书
评论
0/150
提交评论