作者 光源_Android 关注2016.04.05 19:38 字数 1114 阅读 1798评论 4喜欢 38今天逛稀土时偶然看到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方法merge标签来作为根标签(避免额外的ViewGroup)使用include标签(便于布局的复用)避免不必要的布局不要在onDraw中申请内存或者做复杂逻辑去除不必要的invalidate()调用考虑创建自己的ViewGroup用RecyclerView替代ListView和GridViewenum类型的开销(一个指向枚举类型的引用就要占据4个字节)activity里泄漏view实例使用内部静态类优于非静态的除非键都是WeakReference,否则不要使用WeakHashmap作为缓存RenderScript 的性能尽可能减少主线程的工作drawable在透明部分使用.9图设置view的透明度时多注意去除view中无用的背景BitmapFactory.Options(inSampleSize, inDensity, inTargetDensity)加载bitmap到内存时,设置尺寸为显示尺寸如无必要不要进行缩放使用LRU缓存stopService当Service工作完成时系统倾向保留有Service运行的进程,那么被service占用的内存将无法被其他进程使用或者被内存置换限制service生命周期的最佳实践是使用IntentService,它会在工作完成后结束自身让没必要存活的Service继续运行是Android app内存管理最差的举动之一run()方法中使用 PRocess.setThreadPriority(THREAD_PRIORITY_BACKGROUND)可以减少该线程及UI线程的计算性能损耗如果你没有通过这种方式为线程设置低优先级,那么该线程仍会拖慢你的app,因为默认情况下它的优先级与UI线程的优先级相同维护住当前线程的引用,以便你之后可能先打断该线程。例如:当网络连接失败你可以取消该线程新闻热点
疑难解答