阅读更多

1顶
0踩

移动开发

转载新闻 Android 性能典范:拯救计划

2016-04-08 10:02 by 副主编 mengyidan1988 评论(1) 有5043人浏览
前言
今天逛稀土时偶然看到hanks分享的一篇英文文章,粗略浏览便已觉得不错,因此翻译成中文,与君分享。

原文地址:Android Performance Patterns: Rescue tips

正文
现在的app到处都充斥着华丽的动画、复杂的转化还有自定义View,然而用户体验必须尽可能直观且类似。以下这些范例将会帮助你做出一个流畅的、快速响应的、甚至可能减少电量损耗的app,这些范例由一些可以提升整体应用表现的微优化组成。

避免“坏”表现
  • 避免堵塞主线程
  • 避免可能引发大范围重绘的不必要的重绘
  • 用 RelativeLayout 来减少布局层级
  • 避免在 LinearLayout 中使用嵌套的 weight 属性(因为weight属性会使每个子View进行两次measure)
  • 避免使用没有恰当处理的自定义View
  • 避免创建没必要的对象
  • 将常量声明为 static final(static比普通变量快 15% - 20%)
  • 使用基本数据类型(Integer、Float 比基本类型慢两倍)
  • 避免内部的 getter 和 setter(直接访问属性可以快3倍)
  • 使用改进的循环语法【译者注:这里应该是指for each循环】
  • 对私有的内部类考虑使用包访问级别代替私有访问级别
  • 谨慎使用native方法

自定义View
  • 遵循KISS原则
  • 在布局中使用merge标签来作为根标签(避免额外的ViewGroup)
  • 使用include标签(便于布局的复用)
  • 避免不必要的布局
  • 不要在onDraw中申请内存或者做复杂逻辑
  • 去除不必要的invalidate()调用
  • 考虑创建自己的ViewGroup
  • 用RecyclerView替代ListView和GridView

避免内存抖动
  • 不要申请大量不必要的对象内存:
  •    1, 不可变对象:String
       2, 自动装箱:Integer, Boolean...
  • 考虑使用对象池并缓存来减少内存抖动
  • 留心enum类型的开销(一个指向枚举类型的引用就要占据4个字节)

避免内存泄漏
  • 不要在内部类里泄漏context实例
  • 不要在activity里泄漏view实例
  • 使用内部静态类优于非静态的
  • 除非键都是WeakReference,否则不要使用WeakHashmap作为缓存

CPU
  • 不要嵌套多通路布局
  • 当需要时才去进行复杂的计算【译者注:类似懒加载】
  • 缓存复杂计算的结果以复用
  • 考虑 RenderScript 的性能
  • 尽可能减少主线程的工作

避免过度绘制
  • 精简drawable
  • 在透明部分使用.9图
  • 设置view的透明度时多注意
  • 去除view中无用的背景

bitmap
  • 将bitmap解码为需要的尺寸:BitmapFactory.Options(
  • inSampleSize, inDensity, inTargetDensity)
  • 加载bitmap到内存时,设置尺寸为显示尺寸
  • 如无必要不要进行缩放
  • 使用LRU缓存

Service
  • 除非Service在处理事务否则不要让其保持运行。同时也要小心stopService当Service工作完成时
  • 系统倾向保留有Service运行的进程,那么被service占用的内存将无法被其他进程使用或者被内存置换
  • 限制service生命周期的最佳实践是使用IntentService,它会在工作完成后结束自身
  • 让没必要存活的Service继续运行是Android app内存管理最差的举动之一

线程
在线程的run()方法中使用 
  • Process.setThreadPriority(THREAD_PRIORITY_BACKGROUND)可以减少该线程及UI线程的计算性能损耗
  • 如果你没有通过这种方式为线程设置低优先级,那么该线程仍会拖慢你的app,因为默认情况下它的优先级与UI线程的优先级相同
  • 维护住当前线程的引用,以便你之后可能先打断该线程。例如:当网络连接失败你可以取消该线程

避免ANR
  • UI线程中做的事越少越好
  • 如果应用正在后台响应用户的输入,最好显示进度给用户(例如显示一个进度条)
  • 使用Systrace或Traceview等性能工具来检测应用响应能力的瓶颈
  • 如果你的应用有一个非常耗时的初始化过程,考虑使用启动页或者尽快渲染主要的view,表明正在加载中并且正在显示异步的信息


原文链接:http://www.jianshu.com/p/efcb36b7ce48
来自: 简书
1
0
评论 共 1 条 请登录后发表评论
1 楼 Doonavd 2016-04-11 13:52
我觉得,可以出一份测试结果

发表评论

您还没有登录,请您登录后再发表评论

相关推荐

  • Android性能典范:拯救计划

    这些模式会帮助你去构建一个平滑的,敏捷的用电尽可能少的app,它包括微优化可以提高应用程序的整体性能。避免糟糕表现的模式 避免阻塞主线程 避免不必要的失效引发更多的失效 在高的层次结构中作用...

  • [译]Android 性能典范:拯救计划

    原文标题:Android Performance Patterns: Rescue tips 原文地址:https://medium.com/@laanayabdrzak/android-performance-patterns-rescue-tips-8c1e4c7cb1f0#.xzvcgcall 原文作者:Abderrazak Laanaya ...

  • Android:性能典范:拯救计划

    前言 今天逛稀土时偶然看到hanks分享的一篇英文文章,粗略...原文标题:Android Performance Patterns: Rescue tips 原文地址:https://medium.com/@laanayabdrzak/android-performance-patterns-rescue-tips-8c1e4c7

  • Android 性能典范

    Android 性能典范:拯救计划 前言 今天逛稀土时偶然看到hanks分享的一篇英文文章,粗略浏览便已觉得不错,因此翻译成中文,与君分享。 原文地址:Android Performance Patterns: Rescue tips 正文 ...

  • Android UI性能优化(渲染)

    是的开发者学会如何去识别、诊断、解决安卓应用开发中所存在的性能问题。

  • 那些年收藏的技术文章(二)-云笔记篇

    Android IM推送保活相关 JNINDK Material Design Android MultiDex Android安全 Android测试 插件化组件化开发 Android动画 Android多媒体 Android多线程 Android功能特效实现 Android混淆 Android交互设计 Android...

  • 商务周刊:别了,摩托罗拉

    仅仅在10年前,摩托罗拉还一直是引领尖端技术和卓越典范的代表,享有着全球最受尊敬公司之一的尊崇地位.它一度前无古人地每隔10年便开创一个工业,有 的10年还开创两个.但当这些工业兴盛起来,进入寡头竞争的成熟阶段...

  • CNN评2012十二大科技新闻:微软大举转型居首

    但最大的看点还要回归到问题的本质:梅耶尔能否拯救深陷泥潭的雅虎?她已经对雅虎管理层展开重组,重振了员工士气,还改善了公司的移动业务,推出了全新的Flickr应用,且反响不俗。 要全面评估她给雅虎带来的...

  • 商务周刊封面:别了,摩托罗拉

    http://tech.sina.com.cn/t/2008-05-29/12002225063.shtml仅仅在10年前,摩托罗拉还一直是引领尖端技术和卓越典范的代表,享有着全球最受尊敬公司之一的尊崇地位。它一度前无古人地每隔10年便开创一个工业,有的10年...

  • 那些年收藏的技术文章(二) 云笔记篇

    #Android ##IM、推送、保活相关 Android进程保活招式大全 新手入门一篇就够:从零开发移动端IM Android端外推送到底有多烦? Android推送技术研究 微信的智能心跳方案 架构师于小波:魅族实时消息推送架构 ##JNI/NDK...

  • 无线电能传输中电动汽车充电的Matlab与Maxwell仿真:线圈结构与补偿拓扑优化

    内容概要:本文详细介绍了无线电能传输技术在电动汽车充电中的应用,特别是在Matlab和Maxwell中的仿真过程。首先讨论了SS补偿拓扑的Matlab仿真,展示了如何设置线圈参数、进行谐振匹配以及通过相量分析判断软开关状态。接着探讨了Maxwell中DD线圈的3D电磁场仿真,强调了自定义网格划分和涡流场计算的重要性。随后,文章深入研究了多线圈阵列仿真,揭示了不同线圈布局对耦合系数的影响,并提出了LCC补偿拓扑的应用。此外,文中还分享了许多实用技巧,如避免常见错误、优化仿真参数以及处理实际测试中的问题。 适合人群:从事无线电能传输研究的技术人员、研究生及以上学历的研究人员。 使用场景及目标:适用于需要深入了解无线电能传输技术及其仿真的研究人员和技术开发者,旨在帮助他们掌握Matlab和Maxwell的具体应用,提高仿真精度和效率。 其他说明:文章不仅提供了详细的代码示例和仿真步骤,还分享了作者的实际经验和教训,使读者能够更好地理解和应对仿真过程中遇到的问题。

  • 用户增删改查功能的前端页面,添加了vue渲染代码

    用户增删改查功能的前端页面,添加了vue渲染代码。

  • 计算机课程设计相关资源

    计算机课程设计相关资源

  • 基于51单片机protues仿真的猜数字游戏(仿真图、源代码、AD原理图、流程图)

    基于51单片机protues仿真的猜数字游戏(仿真图、源代码、AD原理图、流程图) 猜数字游戏 1、通过随机数实现该游戏; 2、按下K1键启动游戏并随机生成一个0~9的数字 3、通过矩阵按键输入你的数字,输入数字小于随机生成的数字则显示小于该数,大于的时候显示大于该数,直到相等为止。 4、仿真图、源代码、AD原理图、流程图;

  • 基于MATLAB的FOC滑膜观测器与锁相环(MATLAB 2021b)实现及硬件移植注意事项

    内容概要:本文详细介绍了利用MATLAB 2021b搭建的FOC滑膜观测器(SMO)与锁相环(PLL)的仿真模型及其在M4硬件平台上的实现方法。文中首先展示了SMO的核心代码,解释了如何通过滑模面计算和符号函数处理来估算反电动势,并讨论了PLL用于速度提取的具体实现。接着探讨了仿真环境中直接0速闭环启动的效果以及实际硬件实现时所需的开环启动策略。此外,文章还分享了多个调试过程中遇到的问题及解决方案,如相位跳变、高频振荡、电流环参数调整等。 适合人群:从事电机控制研究的技术人员,尤其是对无感FOC感兴趣的工程师。 使用场景及目标:适用于希望深入了解FOC滑膜观测器和锁相环的工作原理并尝试将其应用于实际项目的开发者。目标是掌握SMO+PLL组合的设计思路和技术细节,同时了解硬件移植时需要注意的实际问题。 其他说明:文中提供了大量实用的代码片段和调试经验,对于想要快速入门或优化现有系统的读者非常有帮助。特别强调了仿真与现实之间的差异,提醒读者注意参数选择和滤波器设计等方面的不同之处。

  • 汽车美容员工手册.doc

    汽车美容员工手册.doc

  • 基于PSO算法的配电网分布式光伏选址定容优化及其Matlab实现

    内容概要:本文详细介绍了利用粒子群优化(PSO)算法解决配电网中分布式光伏系统的选址与定容问题的方法。首先阐述了问题背景,即在复杂的配电网环境中选择合适的光伏安装位置和确定合理的装机容量,以降低网损、减小电压偏差并提高光伏消纳效率。接着展示了具体的PSO算法实现流程,包括粒子初始化、适应度函数构建、粒子位置更新规则以及越界处理机制等关键技术细节。文中还讨论了目标函数的设计思路,将多个相互制约的目标如网损、电压偏差和光伏消纳通过加权方式整合为单一评价标准。此外,作者分享了一些实践经验,例如采用前推回代法进行快速潮流计算,针对特定应用场景调整权重系数,以及引入随机波动模型模拟光伏出力特性。最终实验结果显示,经过优化后的方案能够显著提升系统的整体性能。 适用人群:从事电力系统规划与设计的专业人士,尤其是那些需要处理分布式能源集成问题的研究人员和技术人员。 使用场景及目标:适用于希望深入了解如何运用智能优化算法解决实际工程难题的人士;旨在帮助读者掌握PSO算法的具体应用方法,从而更好地应对配电网中分布式光伏系统的选址定容挑战。 其他说明:文中提供了完整的Matlab源代码片段,便于读者理解和复现研究结果;同时也提到了一些潜在改进方向,鼓励进一步探索和创新。

  • 晋升考核制度.pptx

    晋升考核制度.pptx

  • 计网-主机发送IP数据报的过程思维导图

    计网-主机发送IP数据报的过程思维导图

Global site tag (gtag.js) - Google Analytics