文档章节

《Android应用性能优化》第一章 Java代码优化

k
 kim366
发布于 2016/05/13 19:15
字数 636
阅读 2
收藏 0
点赞 2
评论 0
1.1 Android执行代码的流程
       Android开发者使用Java,不过Android平台不用Java虚拟机来执行代码,而是把应用编译成Dalvik字节码,使用Dalvik虚拟机来执行。Java代码仍然编译成Java字节码,但随后Java字节码会被dex编译器(dx, SDK工具)编译成Dalvik字节码,最终,应用只包含Dalvik字节码, 而不是Java字节码。
      
       apk文件只是简单的zip压缩文件,可以使用常见的压缩工具查看apk文件的内容。

       虚拟寄存器是指实际上非真实的硬件寄存器,也就是Dalvik虚拟机使用的寄存器。

       在Android2.2和更高版本中引入了JIT(实时编译器),Dalvik JIT编译器把Dalvik字节码编译成本地代码,这可以明显加快执行速度。因为:
      本地代码由CPU执行,而不必由编译器解释执行。
      本地代码可以为特定架构予以优化。


1.2 从递归到迭代
      选择最佳算法。
      基于性能方面的考虑,在代码的关键路径上,要尽量避免内存分配。

     
1.3 缓存结果
      比如使用SparseArray比使用HashMap效率更高。
      在合适的地方使用LrcCache进行缓存。


1.4 API等级
      应用中manifest文件中使用下面两个属性:
      android:minSdkVersion
      android:maxSdkVersion
      根据属性指定对应的方法操作。例如
      if(Build.VERSION.SDK_INT >= Build.VERSION_CODES_HONEYCOMB){
             sparseArray.removeAt(1); 
      }else{
             int key = sparseArray.keyAt(1);
             sparseArray.remove(key);
      }


1.5 数据结构
      好的算法和数据结构是实现快速应用的关键。  
     1. 好的算法和数据结构是实现快速应用关键。
     2. 尽量使用考虑到优化的数据结构,如LruCache, SparseArray, SparseBooleanArray, SparseIntArray, Pair。
     3. 使用现有的类Arrays, Collections完成一些基本操作。
     4. 使用StringBuilder代替String。


1.6 响应能力
     关键点:要让用户感觉到快。优化的原则是保持应用的持续响应。
     处理方式:
     1. 延迟创建对象。
     2. 降低布局复杂度。使用RelativeLayout代替嵌套LinearLayout, 尽可能保持“扁平化布局”。尽量减少创建对象的数量,让事件处理速度加快。
     3. 可以通过把操作转移到非主线程来加快响应速度。
     4. 通过StrictMode分析速度缓慢原因。网络和文件操作放到子线程中完成。


1.7 SQLite
      1. 充分考虑数据库创建,事务处理,检索查询等方式。  






本文转载自:http://blog.csdn.net/oyangyujun/article/details/47361279

共有 人打赏支持
k
粉丝 1
博文 129
码字总数 0
作品 0
朝阳
bitmap设置图片尺寸缩小,避免内存溢出/OutOfMemoryError的优化方法

我们都知道Android的Dalvik VM为一个应用提供了大约16MB的内存,一般我们处理超过8MB的图片将会出现OutOfMemoryError异常(内存溢出异常),报如下错误: 20155392-byte external allocatio...

DD2086
2011/12/01
0
0
android -------- java虚拟机和Dalvik虚拟机

java虚拟机 虚拟机是一种抽象化的计算机,通过在实际的计算机上仿真模拟各种计算机功能来实现的。Java虚拟机有自己完善的硬体架构,如处理器、堆栈、寄存器等,还具有相应的指令系统。Java虚...

切切歆语
04/29
0
0
Android性能优化:手把手带你全面实现内存优化

前言 在 Android开发中,性能优化策略十分重要 本文主要讲解性能优化中的内存优化,希望你们会喜欢 目录 1. 定义 优化处理 应用程序的内存使用、空间占用 2. 作用 避免因不正确使用内存 & 缺...

codeGoogle
05/08
0
0
Android应用开发以及设计思想深度剖析(4)

特别声明:本系列文章LiAnLab.org著作权所有,转载请注明出处。作者系LiAnLab.org资深Android技术顾问吴赫老师。本系列文章交流与讨论:@宋宝华Barry 紧接连载三,我们接下从性能的角度分别分...

21cnbao
2012/09/25
0
0
性能优化之Java(Android)代码优化

本文主要介绍Java代码中性能优化方式及网络优化,包括缓存、异步、延迟、数据存储、算法、JNI、逻辑等优化方式。 1、降低执行时间 这部分包括:缓存、数据存储优化、算法优化、JNI、逻辑优化...

另类天使
2013/09/30
0
1
Android有效解决加载大图片时内存溢出的问题

尽量不要使用setImageBitmap或setImageResource或BitmapFactory.decodeResource来设置一张大图, 因为这些函数在完成decode后,最终都是通过java层的createBitmap来完成的,需要消耗更多内存...

Thanks
2013/01/27
0
1
Android有效解决加载大图片时内存溢出的问题

尽量不要使用setImageBitmap或setImageResource或BitmapFactory.decodeResource来设置一张大图, 因为这些函数在完成decode后,最终都是通过java层的createBitmap来完成的,需要消耗更多内存...

带梦想一7飞
2012/07/03
0
0
Android动态加载之ClassLoader详解

Dalvik虚拟机如同其他Java虚拟机一样,在运行程序时首先需要将对应的类加载到内存中。而在Java标准的虚拟机中,类加载可以从class文件中读取,也可以是其他形式的二进制流。因此,我们常常利...

hejunbinlan
2017/10/18
0
0
Android有效解决加载大图片时内存溢出问题VMRuntime

解决办法:在以下界面中选择“Project Build Target”中选择“Android 2.2”版本即可。若是选择2.3.1或2.3.3都邑报错。 尽量不要使用setImageBitmap或setImageResource或BitmapFactory.decod...

带梦想一7飞
2013/05/23
0
0
什么是android(What Is Android?)

什么是Android? Android是一个移动设备,包括操作系统,中间件和关键应用软件堆栈。 而 Android SDK提供了必要的工具和API,开始使用Java编程语言在Android平台开发应用程序。 特点 应用程序...

_kxng
2011/08/03
0
2

没有更多内容

加载失败,请刷新页面

加载更多

下一页

微信小程序Java登录流程(ssm实现具体功能和加解密隐私信息问题解决方案)

文章有不当之处,欢迎指正,如果喜欢微信阅读,你也可以关注我的微信公众号:好好学java,获取优质学习资源。 一、登录流程图 二、小程序客户端 doLogin:function(callback = () =>{}){let ...

公众号_好好学java
2分钟前
0
0
流利阅读笔记28-20180717待学习

“我不干了!” 英国脱欧大臣递交辞呈 雪梨 2018-07-17 1.今日导读 7 月 6 日,英国政府高官齐聚英国首相的官方乡间别墅——契克斯庄园,讨论起草了一份关于英国政府脱欧立场的白皮书。可是没...

aibinxiao
32分钟前
2
0
OSChina 周二乱弹 —— 理解超算排名这个事,竟然超出了很多人的智商

Osc乱弹歌单(2018)请戳(这里) 【今日歌曲】 @-冰冰棒- :分享Ed Sheeran/Beyoncé的单曲《Perfect Duet (with Beyoncé)》 《Perfect Duet (with Beyoncé)》- Ed Sheeran/Beyoncé 手机...

小小编辑
43分钟前
27
5
Android 获取各大音乐平台的真实下载地址

废话 电脑使用谷歌浏览器或者QQ浏览器的时候。。。。。。。说不清楚,还是看图吧 大概意思就是,只要网页上需要播放,只要能播放并且开始播放,这个过程就肯定会请求到相关的音乐资源,然后就...

她叫我小渝
今天
0
0
shell中的函数、shell中的数组、告警系统需求分析

shell中的函数 格式: 格式: function f_name() { command } 函数必须要放在最前面 示例1(用来打印参数) 示例2(用于定义加法) 示例3(用于显示IP) shell中的数组 shell中的数组1 定义数...

Zhouliang6
今天
2
0
用 Scikit-Learn 和 Pandas 学习线性回归

      对于想深入了解线性回归的童鞋,这里给出一个完整的例子,详细学完这个例子,对用scikit-learn来运行线性回归,评估模型不会有什么问题了。 1. 获取数据,定义问题     没有...

wangxuwei
今天
1
0
MAC安装MAVEN

一:下载maven压缩包(Zip或tar可选),解压压缩包 二:打开终端输入:vim ~/.bash_profile(如果找不到该文件新建一个:touch ./bash_profile) 三:输入i 四:输入maven环境变量配置 MAVEN_HO...

WALK_MAN
今天
0
0
33.iptables备份与恢复 firewalld的9个zone以及操作 service的操作

10.19 iptables规则备份和恢复 10.20 firewalld的9个zone 10.21 firewalld关于zone的操作 10.22 firewalld关于service的操作 10.19 iptables规则备份和恢复: ~1. 保存和备份iptables规则 ~2...

王鑫linux
今天
2
0
大数据教程(2.11):keeperalived+nginx高可用集群搭建教程

上一章节博主为大家介绍了目前大型互联网项目的系统架构体系,相信大家应该注意到其中很重要的一块知识nginx技术,在本节博主将为大家分享nginx的相关技术以及配置过程。 一、nginx相关概念 ...

em_aaron
今天
1
1
Apache Directory Studio连接Weblogic内置LDAP

OBIEE默认使用Weblogic内置LDAP管理用户及组。 要整理已存在的用户及组,此前办法是导出安全数据,文本编辑器打开认证文件,使用正则表达式获取用户及组的信息。 后来想到直接用Apache Dire...

wffger
今天
2
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部