这章就当填坑了,姑且也算是性能优化吧

⁄(⁄ ⁄•⁄ω⁄•⁄ ⁄)⁄

0x00 集合处理

对一些list和数组的操作其实Java已经帮我们做了不少功课了,回想起来在一些使用场景中笔者还傻乎乎的写一堆for each (滑稽),这里就当提个醒。

场景一:

List和数组的转换,这个看官应该都很了解了,这里还是贴出来做下记录。
数组 → List Arrays.asList()传入可变参数类型。例如

//一般写法
List<String> strList=Arrays.asList("1","2");
List<String> strList=Arrays.asList(new String[]{"1","2"});

值得一提的是这里有个隐藏的坑,上述写法是错误的,再用这个List的时候调用add,remove这些method时出现Java.lang.UnsupportedOperationException异常。这是由于Arrays.asList() 返回java.util.ArraysArrayList,而不是ArrayList。ArraysArrayList, 而不是ArrayList。ArraysArrayList和ArrayList都是继承AbstractList,remove,add等method在AbstractList中是默认throw UnsupportedOperationException而且不作任何操作。ArrayList override这些method来对list进行操作,但是Arrays$ArrayList没有override remove(),add()等,所以会throw UnsupportedOperationException。

//正确写法
List<String> strList=new ArrayList<String>(Arrays.asList("1","2"));
List<String> strList=new ArrayList<String>(Arrays.asList(new String[]{"1","2"}));

场景二:

要快速填充默认数据的数组:

 Arrays.fill();

例如

String strs=new String[10];
Arrays.fill(strs,"haha");

这样就能将tests的数组中都填充haha这个字段,这个方法还支持起始位置和末了位置。
List同理Collections.fill()

场景三:

数组的排序看官也应该很熟悉了,值得一提的是,对数组进行Object排序时

Arrays.sort(Object[] objects,Comparator comparator)

一般是写个匿名实现类来完成排序,也可以重新在Bean对象中重写Comparable接口,对的你没看错,Comparable和Comparator 两个接口的区别在于Comparable是一个类需要内部实现,而Comparator 是外部调用的解析实现。2者都实现时sort方法优先外部调用,也就是Comparator 的compare,Comparator 和Comparable 的实现方法返回值含义相同,1排到后面,-1排到前面,0不变。

场景四:

求数组中某个value的index。好像终于可以摆脱自己for each的实现了,突然间就激动了起来呢。(滑稽)

Arrays.binarySearch()

传入数组和要查找的对象就可以了。对于实体bean的处理有几个点要注意下,
1.不像List集合重写equals方法,执行indexOf就能定位到索引,在binarySearch的源码中的实现方式很不幸的发现不是依赖于equals,而是基于二分查找和Comparable来实现的。
核心方法:

public static int binarySearch(Object[] array, int startIndex, int endIndex, Object value) {checkBinarySearchBounds(startIndex, endIndex, array.length);int lo = startIndex;int hi = endIndex - 1;while (lo <= hi) {int mid = (lo + hi) >>> 1;@SuppressWarnings("unchecked")int midValCmp = ((Comparable) array[mid]).compareTo(value);if (midValCmp < 0) {lo = mid + 1;} else if (midValCmp > 0) {hi = mid - 1;} else {return mid;  // value found}}return ~lo;  // value not present}

也就是说compareTo返回0的时候才能定位到准确的位置,笔者这里认为,compareTo去做一些equals的活有点不太妥当。Arrays.binarySearch()不过这个方法对于基本类型的索引还是值得一用的。

0x01 屏幕适配

这里补上笔者当初一个坑,

场景:

UI:开发我把图切好了,1x,2x,3x,够了吗(其实我是把给IOS的图顺便给你了)
我:够了够了,(我有dp约束,用一套不颗粒化就OK)
说完我就把2x的随手放到了drawable-hdpi里面,dp一约束,低分辨,中等分辨,高分辨一跑,OK收工,心中还窃喜,还给APK节省了点空间(^__^)
后来在一些新建的工程中研究控件的时候定位了到了这个问题,明明初始化只渲染一些背景图,Monitors 中显示占用内存100M+,最后笔者进行了一些测试

测试一:

ImageView控件,真机samsung S7,1440*2560,测试图片为真机截屏

放置路径 wrap_content 180dp*320dp Glide加载
drawable 230.1 228.0 11.3
drawable-mdpi 230.3 228.1 11.3
drawable-hdpi 105.5 104.3 11.3
drawable-xhdpi 60.7 62.2 11.2
drawable-xxhdpi 28.9 30.8 11.3
drawable-xxxhdpi 18.1 19.9 11.0

测试二:

ImageView控件,真机samsung S7,1440*2560,测试图片为小图标

放置路径 48px*48px 128px*128px
drawable 4.2 5.0
drawable-mdpi 4.2 5.0
drawable-hdpi 3.7 5.5
drawable-xhdpi 4.3 5.3
drawable-xxhdpi 4.3 5.1
drawable-xxxhdpi 4.6 5.3

结论

对于大的图片例如启动界面,引导图片全屏图片,如果不用第三方图片框架加载一定要适配所有的drawable,以后内存溢出怎么死的都不知道。。小图标经笔者不完全测试不会有太大问题,虽然笔者更喜欢用svg,当然当path过于复杂则划不来了。

第二章暂时告一段落,如有错误,敬请指正!

敬畏耶和华是智慧的开端;认识至圣者便是聪明。 (箴言 9:10 和合本)

Android性能优化(第二章)相关推荐

  1. 《C++应用程序性能优化::第二章C++语言特性的性能分析》学习和理解

    <C++应用程序性能优化::第二章C++语言特性的性能分析>学习和理解 说明:<C++应用程序性能优化> 作者:冯宏华等 2007年版.最近出了新版,看了目录,在前面增加了一章 ...

  2. Android性能优化一篇文章搞定

    本文由玉刚说写作平台提供写作赞助,版权归玉刚说微信公众号所有 原作者:Mr.s(猪_队友) 版权声明:未经玉刚说许可,不得以任何形式转载 文章之前的一些话: 本文尿点比较多,酌情看自己想看的. 什么是 ...

  3. Android性能优化典范第二季

    原文链接:http://hukai.me/android-performance-patterns-season-2/ 1)Battery Drain and Networking 对于手机程序,网络 ...

  4. Android 性能优化 之谈谈Java内存区域

    最近一年副业主要在学习投资和技能学习,把以前学习内存分析的一些笔记总结发出来,写了很多笔记总结都没有写完就又忙着了,最近再次总结复习学习一遍,还有提醒各位同学一定要学会投资.. 了解Android 内 ...

  5. Android 性能优化 之初识Java内存区域

    前言     不管是日常开发,还是面试,我们都会和内存打交道,因为内存是支持软件运行的基本硬件环境.了解Android 内存管理,就有必要了解Java GC机制,必须要理解JVM 内存区域,这里我们主 ...

  6. 史上最全Android性能优化方案解析

    Android中的性能优分为以下几个方面: 布局优化 网络优化 安装包优化 内存优化 卡顿优化 启动优化 -- 一.布局优化 布局优化的本质就是减少View的层级.常见的布局优化方案如下: 在Line ...

  7. Android面试-Android性能优化和内存优化、APP启动速度一线大厂的实战案例解析

    一.Android 内存管理机制 二.优化内存的意义 三.避免内存泄漏 四.优化内存空间 五.图片管理模块的设计与实现 六.总结 深入探索Android内存优化 第一章.重识内存优化 第二章.常见工具 ...

  8. Android 性能优化

    为什么80%的码农都做不了架构师?>>>    原文作者:鸿洋 原文地址:点我跳转原文 一般情况下,我们谈性能优化基本上会从以下几个方面: App启动速度优化 UI流畅度优化 内存优 ...

  9. Android性能优化系列总篇

    目前性能优化专题已完成以下部分: 性能优化总纲--性能问题及性能调优方式 性能优化第四篇--移动网络优化 性能优化第三篇--Java(Android)代码优化 性能优化第二篇--布局优化 性能优化第一 ...

  10. Android主线程耗时动画卡顿,Android性能优化实战之界面卡顿

    原标题:Android性能优化实战之界面卡顿 作者:红橙Darren https://www.jianshu.com/p/18bb507d6e62 今天是个奇怪的日子,有三位同学找我,都是关于界面卡顿 ...

最新文章

  1. ros::spinOnce()机制 有点东西
  2. QT 调用QWebEngineView显示网页
  3. vector 源码及使用
  4. Linux 防火墙的基本认识
  5. 二、在VMware中搭建PHP集成环境(lamp/lnmp/lanmp)
  6. 浩鲸科技携手阿里云原生共同打造“场域运营数字化解决方案”
  7. 微信小程序获取用户唯一openid,包含java
  8. 值得思考,机器学习模型做出的决策是你想要的吗?
  9. Linux不仅仅是开源
  10. 引入对抗训练的对比学习
  11. 抖音检测注入框架分析
  12. 小程序 图片上传php后台,微信小程序上传图片到php服务器的方法
  13. android holder 一定要内部类吗,Android ViewHolder
  14. Matlab中textscan函数用法
  15. linewidth方法html,HTML canvas lineWidth用法及代码示例
  16. 系统崩溃分析 - vmcore 加载到 Trace32
  17. HBase CURD之Put
  18. 2022江苏省职业院校技能大赛(中职)网络搭建与应用赛项
  19. 用瑞利准则研究显微镜物镜的分辨率
  20. Hudi Clean 清理文件实现分析

热门文章

  1. ./gradlew :spring-oxm:compileTestJava 执行失败。
  2. 第11章常用类库学习总结
  3. 信号完整性的一些概念(2022年6月14日学习笔记)
  4. 极品婆媳龙争虎斗---留洋归来的女博士(11)
  5. [Python] cmd中‘py‘命令不被识别的解决方案
  6. 电子数码商城在线销售系统(asp.net,sqlserver,三层架构)
  7. 网络直播系统的架构,基础版直播间搭建
  8. 跟领导关系再好,敬酒时也要说这3句话术,不讨好上司也受重用
  9. 走出微服务误区:避免从单体到分布式单体
  10. 如何用动态代理功能实现英雄数据库的添加删除判存以及修改功能?