精通安卓性能优化-第一章(一)

Android开发初期之后怎么提升?怎么才能叫精通?方向在哪? 1. Android开发初期之后怎么提升? 首先第一个问题:Android开发初期之后怎么提升?说到这个问题,就不得不先搞清楚 “为什么很多人会一直停留在两三年的水平上,而后一直在重复以往的经验,原地踏步?” 我认为最主要的一个原因就是这部分开发者缺乏主观能动性,或者说缺乏能支撑你坚持学习的兴趣。如果你对Android开发没有太大的兴趣,那么还是尽早换方向吧。有了兴趣,然后就是要有一个比较正确的钻研路线,不要这也搞那也抓,最后什么都知道点,但也就只是知道点儿。 一个很好的例子就是我们平时在开发过程中都会用 阅读详情

第一章 优化Java代码

 

许多的安卓应用开发者从以往的经验对Java语言有很好的使用知识。从1995年出道以来,Java已经成为了一种非常流行的编程语言。有些调查指出Java在和其他语言比较的时候失去了光泽,比如Object-C或者C#,另外有些调查把Java列为最流行的语言。自然,随着移动设备的销量超过个人电脑和Android平台的成功(在2011年11月,每天激活700,000部),Java比以往更加流行。

 

开发移动应用和开发PC应用有很大的不同。现在手持设备功能很强大,但是在性能上来说,落后于PC。比如,一些基准测试显示4核的Intel Core i7处理器比Samsung Galaxy Tab 10.1的双核Nvidia Tegra 2处理器快20倍。

NOTE: 对基准测试的结果须持保留态度,因为它们经常测量系统的一部分,不一定代表一个典型用例。

本章说明了如何保证Java应用程序在Android设备上良好运行,不管使用的是否是最新的Android版本。首先,我们来看看Android如何执行你的代码。接着,我们回顾几种技术去优化一个著名的数学序列的实现,包括如何利用Android提供的最新API。最终,我们回顾几种技术去提高应用的响应和更有效的使用数据库。

在开始前,你应该意识到代码优化在应用程序开发中并不是第一优先的。提供良好的用户体验和专注于代码的可维护性应该是你的首要任务之一。实际上,代码优化应该是你最后的工作重点之一,而且甚至可能完全不会成为这个进程的一部分。好的做法可以帮助你达到可接受的性能水平而不需要你回到你的代码去问自己做错了什么,花费额外的时间去修正它。

Android如何执行你的代码

虽然Android开发者使用Java,Android平台不包含用来执行代码的Java虚拟机(VM)。相反,应用被编译成Dalvik字节码,Android使用它的Dalvik VM去执行它。Java代码仍然被编译成Java字节码,但是这些Java字节码紧接着被dex编译器(dx,一个SDK工具)编译成Dalvik字节码。最终,你的应用仅包含Dalvik字节码,而不是Java字节码。

比如,计算第n个Fibonacci(斐波那契)序列值的方法的一个实现在Listing 1-1给出,连同类的定义。Fibonacci序列定义如下:

F0=0

F1=1

Fn=Fn-2+Fn-1  (n>1)

 

Listing 1-1 Fibonacci序列的递归实现

 

public class Fibonacci {
    public static long computeRecursively(int n) {
        if(n>1) return computeRecursively(n-2) + computeRecursively(n-1);
        return n;
    }
}

NOTE: 这里已经做了一个细节的优化,当N等于0或者1的时候会直接返回N,而不是添加另外一个if语句块去判断N是否等于0或者1。

一个Android应用程序通常被称为一个APK,因为它会被编译成一个带APK扩展名的文件(比如,APress.apk),实际上是一个简单的压缩文件。压缩包中的一个文件是classes.dex,包括了应用程序的字节码。Android工具链提供了一个工具, dexdump,可以把字节码(包含在APK中的classes.dex文件中)从二进制格式转换为可读的格式。

TIP:因为APK文件是一个简单的ZIP 压缩包,可以使用通用的压缩工具比如WinZip或者7-Zip去查看APK文件的内容。

Listing 1-2显示了对应的Dalvik字节码。

每一行的第一列的数字指出了代码在文件中的绝对位置,除了第一行(给出了方法的名字),紧跟在这个数字后面是一个或者更多16位的字节码单元,表示操作码助记符和操作码参数(opcode: 操作码;mnemonic:助记符),紧跟在它后面的是代码在方法内的相对位置(相对位置或者标签)。比如,在地址0x00255a的字节码单元3724 1100翻译成“if-le v4, v2, 0012 // +0011”,基本含义是“如果虚拟寄存器v4的存储内容小于或者等于寄存器v2的内容,就跳过17个字节码单元到0x0012”。单词“virtual register”表示这些不是真正的硬件寄存器而是Dalvik虚拟机使用的寄存器。

通常,你不需要去看应用程序的字节码,特别是Android 2.2(Froyo)及以后的版本,因为从Android 2.2引入了Just-In-Time(JIT)编译器。Dalvik JIT编译器把Dalvik字节码编译成native code,运行速度显著提高。JIT编译器(有时候简称JIT)能够显著的提高性能,是因为:

(1) Native代码可以直接被CPU执行,而不需要经过虚拟机解释
(2) Native Code可以针对特定的架构(architecture,这里个人理解应该指CPU架构)优化

Google的基准测试显示Android 2.2的代码运行速度比Android 2.1快2到5倍。尽管具体代码不同结果可能会有所不同,使用Android 2.2和以后的版本你可以预期一个显著的速度提升。

没有JIT编译器存在的Android版本(Android2.1以前包括Android2.1)可能会非常明显的影响到你的优化策略。如果目标设备运行Android 1.5(Cupcake)、Android 1.6(Donut)、Android 2.1(Eclair),很可能你需要更加仔细的去检查你期望或者需要在你的应用程序里面提供什么。而且,运行这些早期版本安卓的设备,没有更晚一些的设备功能强大。尽管市场上Android 2.1及其以前版本的设备在缩减,截止2011年12月仍然有12%左右。可能的优化策略包括:

(1) 完全不优化。应用在老一些的设备上可能运行非常慢。
(2) 设置你的应用需要的最低的API level为8,这样应用仅可以安装在Android 2.2及以后的版本的设备上。
(3) 当JIT编译器不存在,针对老的设备进行优化以提供一个好的用户体验。这可能意味着需要屏蔽掉耗CPU的功能。

TIP:在manifest文件里面使用android:vmSafeMode标签去启用或者禁用JIT编译器。默认它是开启的(如果平台支持)。这个属性在Android 2.2开始引入。

现在是时候将代码在一个实际的平台上运行,看看它如何执行。如果你熟悉递归和Fibonacci序列,你可能猜测它将运行的非常慢。这是正确的。在Samsung Galaxy Tab 10.1上,计算第30个Fibonacci数需要大约370毫秒。禁用JIT编译器,需要大约440毫秒。如果在一个计算器应用中使用这个函数,用户会变得很沮丧,因为结果不能被“立即”计算出来。从用户的角度看,如果可以计算的话,结果应该立即显示,在100毫秒或者更少的时间内。这样的一个响应时间保证非常好的用户体验,所以这是我们的目标。

安卓ROM开发入门到精通 包含内容: 第一期主要为ROM开发,ROM定制技术资料,提供一些工具为主 ,让你学会简单做包,和基本的ROM DIY技巧,偶尔附加一些必要的教程。第二期针对ROM技术教程,细分知识点,重点剖析、解释,形成一系列的知识文档供查阅,目前大纲已列出,可以教你从零开始做包。 1.第一期---技术资料(维护更新): 更新日志: 1.书籍-Android系统级深入开发——移植与调试 2.开发工具-And... 阅读详情

相关推荐

Android/JAVA性能优化:从入门到精通(万字讲解!!!)

在当今快速发展的移动应用市场中,用户体验是决定应用成功与否的关键因素之一。无论是在Android还是其他平台上,应用的性能表现直接影响用户的满意度和应用的市场竞争力。作为开发者,掌握Java性能优化的技巧不仅能够提升应用的流畅度,还能延长应用的生命周期,从而在激烈的市场竞争中脱颖而出。本文将从内存管理、线程与并发、代码优化、网络优化、数据库优化等多个方面,深入探讨Java性能优化的策略和技巧,帮助开发者在实际开发中提升应用性能,优化用户体验。提示:以下是本篇文章正文内容,下面案例可供参考。

学无止境 1222

Android从入门到精通

全书共分15章,内容包括Android快速入门、Android模拟器与常用命令、用户界面设计、高级用户界面设计、基本程序单元Activity、Android应用核心Intent、Android事件处理、资源访问、图形图像处理技术、多媒体应用开发、Content Provider实现数据共享线程与消息处理、Service应用、网络编程及Internet应用和基于Android的家庭理财通。[Android.游戏开发入门](美)Mario.Zechner.插图版.pdf。

github_38514857的博客 878

android游戏开发从入门到精通,androidstudio插件开发

如果基础知识有太多不会的就危险了,必须好好准备,这是躲不过的。这个阶段有不会的很正常,因为对方正在确定你的水平,但态度一定要积极主动,即使之前没有研究过,也要结合一些经验说出推测的结果,切忌直接说“我不会”。我只贴上我写过内容的链接,剩下的朋友们去网上一搜,或者去买本书看下就好了,建议看 《Java 编程思想》,不仅解答了 What 还有探讨 Why。我这次面试算法问的比较少,只手写过插入排序,建议把冒泡、插入、归并时间复杂度和实现熟悉熟悉,最好手写下,不然现场手写的时候容易出错。

2401_84408418的博客 1419

想学Android开发,是否必须精通Java?

想学Android开发,必然需要先精通Java,其次c++,再后面是kotlin,基本代码上系统源码framework层面都是java和c++,基本上找不到任何kotlin,源码中只有几个简单app使用是kotlin。在这里,我为大家整理了一些列Android学习资料,有需要的朋友可以扫描下方二维码,获取更多相关资料。

Eqiqi的博客 1988

从零到精通:Android开发学习路径全解析

Android开发作为移动互联网核心技术之一,其技术栈经历了从基础SDK到现代架构的演进。理解Android系统架构需要扎实的Java/Kotlin基础,掌握Activity生命周期、UI组件等核心概念。在进阶阶段,开发者需要关注性能优化、架构设计等关键技术,如内存管理、MVVM模式实现等。通过项目实践和源码阅读,开发者可以深入理解Binder机制、AMS等底层原理。本文以知名博主stormzhang的学习路径为例,系统梳理了从Java基础到Flutter跨平台的完整学习框架,为移动开发者提供了一条清晰的技

weixin_34326558的博客 268

Android面试指南与参考答案——基于领星安卓开发职位要求

本文基于领星安卓开发职位要求,整理Android开发岗位常见面试问题与参考答案。核心内容包括:1.基础知识:Android四层架构、SDK组件及API使用;2.编程语言:Kotlin优势、Jetpack组件应用及MVVM/MVP架构对比;3.开发工具:性能优化方法及版本适配策略;4.实战经验:第三方SDK集成和APP发布流程。针对1-3年经验者及应届生,提供代码示例和项目实例说明,覆盖框架搭建、性能优化等关键技术点,帮助候选人系统准备面试,突出技术能力和问题解决思维。

郑伟强dev的专栏 1192

android性能优化从入门到精通

什么是性能优化 一款app除了要有强大的功能和交互外,在性能上也应该追求更高的要求,这样才能更好的提高用户体验 优化目的 性能指标 优化的方向 更快 流畅性 启动速度页面响应速度响应速度 更稳定 稳定性 避免出现应用崩溃(crash)避免出现应用无响应(ANR) 更省 资源节省性 内存大小安装包大小耗电量网络流量 优化详解 速度优化 内存优化 数据结构优化:数据结...

qq_23081779的博客 1765

TC8测试TCP-UNACCEPTABLE-04/006

TC8测试TCP-UNACCEPTABLE-04/006

精通安卓游戏开发(一)

这本书是学习高级 Android 应用开发的实用指南。本书帮助掌握 Android 的核心概念,并在实际项目中快速应用知识。在整本书中,创建了一个应用,并在每一章中不断进化,以便读者可以轻松地跟随并吸收概念。本书分为十二章。前三章专注于应用的设计,解释了设计的基本概念以及 Android 中使用的编程模式。接下来的几章旨在改进应用,访问服务器端以下载要在应用中显示的信息。一旦应用功能完成,它将使用 Material Design 组件和其他第三方库进行改进。

龙哥盟 475

海思MPP平台千兆以太网驱动集成与测试指南

千兆以太网(GE)是嵌入式视觉系统中音视频流传输与边缘控制的核心物理接口,其底层驱动需兼顾DMA高效调度、中断实时响应与PHY链路稳定性。在Linux嵌入式环境中,GE驱动通常基于net_device框架实现,并深度耦合于SoC专用媒体处理平台(如海思MPP),通过硬件抽象层(HAL)屏蔽寄存器操作,提供零拷贝、RGMII时序适配、描述符环管理等关键能力。技术价值体现在降低CPU负载、保障1080p@30fps实时推流、支持ONVIF/RTSP协议交互及固件远程升级。典型应用场景包括网络摄像机(IPC)、A

weixin_42599908的博客 89

电池保护板为什么采用NTC热敏电阻而不是PTC热敏电阻?

R25=10K,即环境温度25°时,阻值是10K),温度变化1°C,阻值相应地明显变化,温度响应很灵敏,也就能精准地反向换算出阻值对应的温度。另外,还有功率型NTC热敏电阻,其主要用在开关电源设计中,串联在市电输入上,抑制浪涌电流。电池保护板上的NTC热敏电阻(NTC一端接地,另一端接电池充电控制IC管脚),在电池温度上升时,NTC热敏电阻温度也会随之上升,从而NTC电阻值会下降,因此电池充电控制IC用ADC检测的电压值就降低,当检测到的电压值达到下限阈值时,电池充电控制IC就会停止对电池的充电或放电。

电子绿洲的博客 5626

Android性能优化:从入门到精通

本文从基础知识、优化方法和实战案例分析三个方面,详细介绍了Android性能优化的方法和技巧。性能优化是Android开发中不可或缺的一部分,对提升用户体验具有重要意义。开发者应掌握性能优化的基础知识,合理运用优化方法,以实现应用的高性能表现。未来,随着移动设备的性能不断提升,性能优化将更加重要。开发者需要关注新的优化技术和工具,不断更新优化策略,以满足用户对高性能应用的需求。同时,性能优化也需要与用户需求相结合,避免过度优化,确保应用的平衡发展。持续关注新技术。

2501_92486623的博客 357

手把手教你用Simulink搭建DSOGI-PLL模型(附完整代码下载)

本文详细介绍了在Simulink中搭建高鲁棒性DSOGI-PLL模型的完整工程实践指南。针对传统锁相环在非理想电网下的不足,文章深入剖析了双二阶广义积分器锁相环(DSOGI-PLL)的核心原理与优势,并提供了从模块构建、系统组装到参数整定与测试验证的全流程手把手教程,附有完整代码下载,助力工程师应对谐波、电压跌落等复杂电网工况。

weixin_29223603的博客 387

QtScrcpy安卓投屏完整攻略:从入门到精通

还在为手机屏幕太小而烦恼吗?想要在大屏幕上畅玩手游却不知从何下手?QtScrcpy这款开源安卓投屏工具正是你需要的解决方案!它能将手机屏幕实时投射到电脑,支持键盘鼠标操作,让你彻底告别触摸屏的局限。 ## 🎯 为什么选择QtScrcpy? **传统投屏痛点**: - 连接复杂,步骤繁琐 - 延迟高,画面卡顿 - 不支持键鼠操作 - 无法多设备管理 **QtScrcpy优势对比**: ✅ *

gitblog_00510的博客 3万+

【WILEY】从Revision到Online:逐层拆解投稿状态更新与关键文件提交实战

本文详细解析了学术论文从返修到在线发表的全过程,重点拆解了投稿系统状态更新背后的含义与应对策略。文章提供了返修稿与回复信的准备技巧、关键补充文件(如图文摘要)的提交要点,并分享了校对校样与处理出版协议的实战经验,帮助作者高效、专业地完成发表流程。

weixin_29209805的博客 712

c语言版数据结构课程设计 学生成绩管理系统

此学生成绩管理系统完成15项功能,是我经过很多次的修改得到的。花费时间不短,功能齐全,主要完成了:输入,输出,插入,修改,删除,查询,读取文件,写入文件,复制文件,建立索引,显示各种情况下的信息,追加学生信息等等功能。一共15项。   代码如下: // shujujiegou.cpp : 定义控制台应用程序的入口点。///**本程序采用数组链表形式,原因:数组查询速度快,数组也能实现动态存储

Java 1万+

Android面试官:你究竟有多大的勇气,在简历上写了“精通”?

自定义 View 可以让我们产生更好的效果,app UI 美观,交互界面友好,用户青睐,用户留存率高,这就是app成功的第一步了。高级UI与自定义View有着不可分割的联系。自定义View其实并不难,为什么呢?因为自定义View无非就是显示+交互:显示由 onMeasure ->onLayout->onDraw的整个流程就将显示整个流程处理完了,而交互则是touch事件的处理;另外其他的一切你比如Canvas,Animation,Paint都是围绕着draw来进行的,所以我们需要搞懂其中的根本原理。

the shy 127

电驱系统功率级“多合一”解决方案

如何提升电驱动系统的产品性能、减小能耗和进一步轻量化,以加强整车市场竞争力,是摆在国内外新能源车企面前的共同课题。为此,具有多年动力总成电子系统开发经验的美国著名半导体及电子解决方案专家——德州仪器(Texas Instrument)提出了多种功率级别“多合一”整合方案和设计思路,助力新能源车企提升技术优势。

yessunday的专栏 1370

精通安卓应用开发(一)

本书是学习高级 Android 应用开发的实用指南。本书帮助掌握 Android 的核心概念,并在实际项目中快速应用知识。在整本书中,创建了一个应用,并在每一章中进化,以便读者可以轻松地跟随并吸收概念。本书共分为十二章。前三章主要关注应用的设计,解释了设计的基本概念以及在 Android 中使用的编程模式。接下来的章节旨在改进应用,访问服务器端以下载应用中要显示的信息。应用功能完成后,将使用 Material Design 组件和其他第三方库进行改进。在结束之前,为应用添加了额外服务,如位置服务、分析、崩溃

龙哥盟 445

《Java开发及前端最全面试题-Offer直通车》目录

Java开发是需求最广,工资高的细分领域,同时也是会的人最多,有的公司招1个Java开发,要面试几十甚至上百面试者,同时要求很高,要求通晓技术栈很多及很深深度。如果你正准备面试,想要脱颖而出,那么《Java开发及前端最全面试题-Offer直通车》是你的不二选择。本书汇集了多篇超过1万字的精华内容,无论是Java基础、数据库、SpringBoot和SpringCloud等必问的,还是前端、k8s等容器和虚拟化和大数据各类技术面试,本书都为你提供了最全面的试题和参考答案。

大模型大数据攻城狮的专栏 1178

嵌入式开发之瑞芯微RK356x--基本环境搭建

嵌入式环境搭建

NexyHO的博客 617

3分钟精通安卓虚拟相机:从零配置到多场景实战

想要在安卓设备上实现摄像头内容的灵活替换吗?VCAM虚拟相机为您提供了完美的解决方案。这款基于Xposed框架的安卓虚拟相机支持安卓5.0及以上系统,能够为直播、视频会议、隐私保护等场景创建虚拟摄像头接口,让您的手机摄像体验更加丰富多彩! ## 🎯 基础入门:环境准备与快速启动 ### 必备条件清单 在开始使用VCAM虚拟相机前,请确保您的设备满足以下基本要求: - ✅ 已安装Xposed

gitblog_00738的博客 666

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

零基础玩转Windows Subsystem for Android:从安装到精通的实用指南

Windows Subsystem for Android(简称WSA)是微软推出的革命性功能,它就像在Windows 11系统中搭建了一座通往Android世界的桥梁????,让你的电脑无需复杂配置就能直接运行手机应用。想象一下,你可以在电脑上刷短视频、使用生产力APP,甚至畅玩安卓游戏,所有操作都在熟悉的Windows环境中完成。对于开发者而言,这更是测试安卓应用的利器;对于普通用户,它则打破了设...

gitblog_01031的博客 1645

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

Scrcpy安卓投屏终极指南:从零到精通的完整教程

你是否曾经需要在电脑上操作安卓设备,却苦于找不到合适的工具?Scrcpy作为一款专业的安卓投屏解决方案,能够完美解决这一痛点。本指南将带你深入理解Scrcpy的核心机制,掌握从基础连接到高级优化的全套技能。 ## 问题诊断:为什么你需要Scrcpy? 在深入技术细节之前,让我们先明确Scrcpy能够解决哪些实际问题。 **使用前 vs 使用后对比分析:** | 场景 | 传统方式痛点 |

gitblog_00660的博客 1060

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

Windows 11安卓子系统终极安装指南:从零到精通完整教程

想要在Windows 11上完美运行Android应用吗?WSA-Script项目为你提供了终极解决方案!这个开源项目能够将Magisk root权限和Google Play服务集成到Windows Subsystem for Android™中,让你在PC上获得完整的Android体验。🚀 ## 🔧 准备工作:系统要求检查 在开始安装Windows安卓子系统之前,请确保你的系统满足以下要

gitblog_00491的博客 1005

安卓虚拟相机VCAM完全配置手册:从入门到精通

安卓虚拟相机VCAM是一款革命性的开源工具,专为需要灵活控制摄像头输出的用户设计。通过Xposed框架的支持,这款虚拟摄像头能够在安卓5.0及以上系统中完美运行,为直播、视频会议、隐私保护等场景提供强大的视频流替换能力。 ## 🎯 环境准备与系统要求 ### 硬件与软件兼容性检查 在开始安装之前,请确保您的设备满足以下核心要求: | 检查项目 | 最低要求 | 推荐配置 | |-----

gitblog_01058的博客 626
上一篇: 精通安卓性能优化(Pro Android Apps Performance Optimization)-前言
下一篇: 精通安卓性能优化-第一章(二)
北冥_有鱼
博客等级 码龄19年 14粉丝 0原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值