android与java的差异api使用

枚举

避免在android中使用java的枚举类型,因为编译后不但占空间,加载也费时,完全没有static final的变量好用、高效

SparseArray与HashMap

(1)SparseArray(LongSparseArray)比HashMap更省内存,在某些条件下性能更好,主要是因为它避免了对key的自动装箱(int转换为Integer),它内部则是通过两个数组进行数据存储的

(2)内部对数据还采取了压缩的方式来表示稀疏数组的数据,从而节省内存空间

(3)SparseArray在存储和读取数据的时候,使用的是二分查找法,SparseArray存储的元素都是按元素的key值从小到大排列好的,而在获取数据的时候,也是使用二分查找法判断元素的位置,所以在获取数据的时候非常快,比HashMap快的多

(4)虽说SparseArray性能比较好,但是由于其添加、查找、删除数据都需要进行一次二分查找,所以在数据量大的情况下性能会降低,最好在数据量千级以下使用

ArrayMap与HashMap

(1)ArrayMap是一个映射的数据结构,它的设计上更多是考虑内存的优化,内部也是使用两个数组进行数据存储

(2)和SparseArray一样,也会对key使用二分查找法进行从小到大的排序,在添加、删除、查找的时候都是先使用二分查找法得到相应的index

(3)和SparseArray一样,在数量大的情况下性能会降低

Parcelable与Serializable

Serializable的作用是将数据对象存入字节流当中,在需要时重新生成对象,主要应用是利用外部存储设备保存对象状态,以及通过网络传输对象等,而Parcelable是直接在内存中读写,很明显内存的读写速度通常大于IO读写,而且Serializable在序列化的时候会产生大量的临时变量,从而引起频繁的GC,所以在android中的序列化通常优先使用Parcelable

StringBuilder和StringBuffer

大部分不考虑线程安全的时候直接使用StringBuilder要更高效

Handler的内存泄漏

发送消息时尽量使用obtain去获取已经存在的message对象进行复用,而不是new Message对象,这样可以节省内存

退出时注意调用Handler的removeCallbacks和removeMessages避免内存泄漏

Service和IntentService

在使用后台Service时尽量将能够替换为IntentService的地方替换掉,这样可以减少系统压力,省电,省内存,省cpu占用

变量引用的优化

在当前类内部中尽量不用通过自己的getXXX、setXXX对自己的内部成员进行操作,而是直接使用,这样可以提高代码执行效率,不要一味的为了设计模式而过分的抽象代码,因为代码抽象系数与代码加载执行时间成正比

使用LocalBroadcastManager代替BroadcastReceiver

LocalBradcastManager发送的广播只会在App内传播,不会泄露给其他App,确保隐私数据不会泄露,其他App也无法向你的App发送该广播,不用担心其他App过来搞破坏,而且LocalBroadcastManager比BroadcastReceiver更高效

尽量避免在经常调用的方法、循环中new对象

由于系统不仅要花费时间来创建对象,而且还要花时间对这些对象进行垃圾回收和处理,在我们可以控制的范围内,最大限度的重用对象,最好能用基本数据类型或数组来代替对象

对Map和List初始化的时候,如果知道容量大小,最好把容量填上

如:ArrayList list = new ArrayList(100);

避免在容量不够的时候自动扩容(2倍扩容)浪费内存

避免非静态内部类

当你创建并实例化一个非静态内部类的时候,你就建造了一个指向外部类的隐含引用,如果这个内部类的实例比外部类存活的时间还要长,那即使不需要这个外部类,它还是会保存在内存中。例如,在Activity类中创建了一个扩展AsynTask的非静态类,开始处理异步任务,在运行过程中杀掉了这个Activity,只要这个异步任务还在运行,这个Activity也会一直存活,无法释放内存

Activity的内存泄漏

这是android中最常见的的内存泄漏,也是非常昂贵的泄漏,因为他们里面包括了UI中所有的视图层级,这占用了很多内存空间,有很多操作都需要一个Context对象,通常用一个Acitivty来传递这些信息,要确保你理解了那个Activity上发生了什么,如果一个指向他的引用被缓存了,而且这个对象要比Activity生成时间更长,若不清除这个引用,就会造成内存泄漏,所以大部分时候能用Application太代替很多地方的Context传值

例如static Resources res = activity.getResources();把这个缓存为一个全局静态变量,则会造成activity无法被回收

Json与XML

网络数据通常使用Json格式,而不选xml,同样的数据,json的格式比xml的数据量要小,而且解析速度也更快

有很多优化,其实就是时间和空间的平衡问题,有时候需要以时间换空间,有时候需要以空间换时间。经常需要在内存使用和运行效率的中间寻找一个平衡点

android界面怎么优化字符串,android应用性能优化相关推荐

  1. android bitmap string,Android Bitmap到Base64字符串(Android Bitmap to Base64 String)

    Android Bitmap到Base64字符串(Android Bitmap to Base64 String) 如何将一个大的Bitmap(用手机相机拍摄的照片)转换为Base64 String? ...

  2. 性能优化分析及常见性能优化策略总结

    最近,大家似乎都对性能优化分析,这一方面比较感兴趣.一方面是比较感兴趣,另一方面就是遇见许多类似的状况,但是,却不知从何下手,根源在哪里?应当如何正确优化?首先,先跟大家讲解下常见的性能优化策略分类! ...

  3. 【Linux 性能优化系列】Linux 性能优化 -- CPU 性能篇(一) 平均负载、上下文切换、CPU 使用率

    [Linux 性能优化系列]Linux 性能优化 -- CPU 性能篇(一) 平均负载.上下文切换.CPU 使用率 [1]相关概念 [1.1]平均负载 平均负载是指单位时间内,系统处于可运行状态和不可 ...

  4. 前端性能优化(一)性能优化的指标和工具

    前端性能优化(一)性能优化的指标和工具 一.性能指标 1. F12 network进行调试,我们以淘宝为例 2. 此外还有一个瀑布流的概念 waterfall 3.蓝线和红线 4.保存当前网页指标,方 ...

  5. 【Linux 性能优化系列】Linux 性能优化 -- CPU 性能篇(三) Linux 软中断

    [Linux 性能优化系列]Linux 性能优化 -- CPU 性能篇(三) Linux 软中断 [1]相关概念 [1.1]中断 中断其实是一种异步的事件处理机制,可以提高系统的并发处理能力:为了减少 ...

  6. Android手机为何不再卡顿?性能优化才是安卓起飞关键

    现在谈到挂载 Android系统的 手机,大部分人的印象早已不像前几年,几年前的安卓机那是用了一段时间就变得有点卡顿,用1年就卡的动弹不得,不得不每年都更换新机. 为什么以前会出现这种情况呢?其实主要 ...

  7. Android自绘控件开发与性能优化实践——以录音波浪动画为例

    前言 本文实战性较强,主要目的是通过一个自定义控件的开发,引出我对自定义控件性能优化的一些思考和实践,欢迎各位喜欢移动开发的小伙伴来拍砖~ 本文由于篇幅有限,只讲解思路,并没有放出大量源代码,如果对本 ...

  8. Android八大模块进阶学习笔记(性能优化、百大框架、高级UI、Flutter、Kotlin...)

    今年来,Android开发行业的就业形势愈加严峻,无论刚刚入门Android学习没有头绪的.还是开发多年想要突破薪资范畴的,都需要跳出编码和业务的局限,学会选型.扩展, 提升编程思维,建立良好的职业规 ...

  9. Android性能优化面试题,与性能优化相关面试题 - 与IPC机制相关面试题 - 《Android面试宝典》 - 书栈网 · BookStack...

    源码分析相关面试题 Activity相关面试题 与XMPP相关面试题 与性能优化相关面试题 与登录相关面试题 与开发相关面试题 与人事相关面试题 与人事相关面试题现在三四月份,金三银四最好找工作时间, ...

  10. Android开发-WebView的缓存处理和性能优化 实现H5页面秒开【四】

    前言 老早之前就想总结下Webview相关的知识点了,因为互联网大潮中,很多APP都会使用到Webview,像那些不计其数的电商APP,无一例外的使用Webview:或者一些非电商APP中的像广告页面 ...

最新文章

  1. 考系统架构设计师必看--微内核操作系统
  2. 科研实习 | 香港科技大学统计机器学习实验室张潼教授招收暑期科研实习生
  3. 换脸系列——眼鼻口替换
  4. 谁在偷你的记忆? 应用服务器版
  5. Symbol Mc1000 快捷键 的 设置 事件 开发
  6. 多线程编程 RW_LOCK 读写锁
  7. 左手代码,右手带娃,还能发十几篇 paper,程序员女神是如何炼成的?
  8. 海盐商贸学校计算机类试卷,海盐县商贸学校
  9. cocos2d-x将背景色改为白色
  10. vSphere 5.5.0 U1配置问题:主机的快速统计信息不是最新的
  11. android学习资料免费下载
  12. 个人微信api接口调用代码
  13. HTML 参考手册- (HTML5 标准)
  14. ANSYS Icepak电子散热基础教程+ANSYS Icepak进阶应用导航案例.zip
  15. ios逆向工具 theos tweak多文件使用方法
  16. IE代理服务器没有响应 浏览器无法打开网页解决方法(浏览器无法打开网页但是可以使用其他软件)
  17. 【栈和队列】栈的push、pop序列
  18. 荣耀magic v参数配置
  19. Excel的题库转换为word的题库
  20. OpenCV学习记录 三 (傅里叶逆变换原理及实现)

热门文章

  1. 百度编辑器(ueditor)@功能之获取坐标
  2. oracle 创建用户、授权、表空间
  3. [精华] 数据库的查询优化技术
  4. linux rootkit 新型 HORSE PILL 简介
  5. linux 挂载u盘
  6. npm install 因网络链接慢 卡住解决方法
  7. linux 错误 too many open files 解决方案
  8. VS编译时output/Error list窗口自动弹出设置
  9. 启动controller节点nova组件服务,报错ERROR 13
  10. html5制作交互式课件,用flash制作交互式课件.ppt