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

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

数据结构

像在不同的Fibonacci实现中展示的那样,好的算法和数据结构是能够快速运行的应用程序的关键因素。你需要对Android和Java定义的许多数据结构比较熟悉,可以快速的针对需求选择合适的数据结构。考虑选择合适的数据结构是开发最的高优先事情之一。

在java.util包中的主要数据结构列在图1.1中。

图1-1 Java.util包中的数据结构



安卓添加了一些独有的数据机构,通常是为了解决常见问题或者提升性能。
(1)  LruCache
(2)  SparseArray
(3)  SparseBooleanArray
(4)  SparseIntArray
(5)  Pair

NOTE: Java同样定义了Arrays和Collections类。这两个类仅包含静态方法,分别对arrays和collections进行操作。比如,使用Arrays.sort去排序一个array,Arrays.binarySearch在排好序的array中查找一个值。

尽管上面的Fibonacci实现中有一个用到了cache(基于sparse array),那个cache仅仅是临时的,当计算完成后马上变得可回收。可以使用一个LruCache去保存最终结果,如Listing 1-13所示。

Listing 1-13 使用LruCache保存Fibonacci序列值

int maxSize = 4*8*1024*1024;  // 32M
LruCache<Integer, BigInteger> cache = new LruCache<Integer, BigInteger>(maxSize) {
    protected int sizeOf(Integer key, BigInteger value) {
        return value.bitLength();  // 对象大小的近似值,以位为单位
    }
};
...
int n = 100;
BigInteger fN = cache.get(n);
if (fN == null) {
    fN = Fibonacci.computeRecursivelyWithCache(n);
    cache.put(n, fN);
}

任何时候你需要选择一个数据结构去解决问题,都要可以缩小选择到几类,因为每个类通常针对一个特定的目的优化或者提供一个特别的服务。比如,如果你不需要操作同步,可以选择ArrayList而不是Vector。当然,你可能经常创建自己的数据结构类,从头开始创建(继承object)或者继承一个现存的类。

NOTE:你能够解释为什么在Listing 1-11中,LruCache为什么不是computeRecursivelyWithCache一个好的选择么?

如果你使用的数据结构依赖于hashing(比如HashMap),并且key是你创建的类型,保证你重写了equal和hashCode方法。一个不好的hashCode实现可以轻易的消除使用hashing带来的好处。

TIP:参看http://d.android.com/reference/java/lang/Object.html,hashCode()的一个很好的实例。

尽管对许多的嵌入式应用开发者来说,在应用程序的不同部分把一个数据结构转换成另外一个并不常见。在有些情况下,性能的提升可以很容易的超过转换的开销,因为有更好的算法可以应用。一个常见的例子的是collection转换为array,很可能是已经排过序的。这样的一个转换显然需要内存,因为需要创建一个新对象。在内存受限的设备上,这样的内存分配不是经常可行的,会产生OutOfMemoryError异常。Java语言规范指出两件事:

(1) Error类和它的子类是普通的应用程序通常不预期可恢复的异常
(2) 成熟的应用期望可以捕获和从Error异常恢复

如果内存分配只是优化的一部分,而你作为一个熟练的应用开发者,可以提供一个fallback机制(比如,一个算法,尽管慢一些,使用最原始的数据结构),捕获OutOfMemoryError异常,这样允许兼容更多的设备。这些可选的优化使你的代码更难维护,但是可以让你达到更大的目标。

NOTE:与直觉不同的是,不是所有的异常都是Exception的子类。所有的异常是Throwable的子类(Exception和Error是它的直接子类)。

总而言之,你要对java.util和android.util两个包非常熟悉,因为它们是几乎所有组件依赖的工具箱。每当一个新的安卓版本发布的时候,你需要尤其关注这些包的变动(添加的类、改变的类),可以参考http://d.android.com/sdk。更多的数据结构在java.util.concurrent中讨论,它们将在第五章涉及到。

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

相关推荐

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

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

学无止境 1222

Android应用性能优化

《Android应用性能优化》基本信息原书名:Pro Android Apps Performance Optimization作者: (法)埃尔韦(Hervé,G.) [作译者介绍]译者: 白龙丛书名: 图灵程序设计丛书出版社...

csdn1232的博客 174

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

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

weixin_34326558的博客 268

精通安卓性能优化(Pro Android Apps Performance Optimization)-前言

最近在做安卓性能优化相关的事情,想起曾看到的《Pro Android Apps Performance Optimization》,那个时候刚刚开始接触安卓,还在学习安卓四大组件,没有到专注的考虑性能问题的地步。当时欣慰的发现和作者(Herve Guihot)为同一家公司工作,不过这位大牛在美国分部,没有当面请教的机会。 市面早已经有这本书的翻译版,也有人在论坛发布自己的译文,不过更喜欢读原版,...

路漫漫 其修远 2692

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

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

2401_84408418的博客 1419

android开发从入门到精通pdf下载,系列教学

如果你觉得这些内容对你有帮助,可以扫码领取!!!!

2301_82241859的博客 1306

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

Native Tracing 除了使用startMethodTracing() API分析Java方法外,安卓同样支持native tracing(包括核心代码)。Native tracing也被称为QEMU tracing。本段学习如何产生QEMU trace文件,怎么样将他们转换为Traceview可以理解的文件。 为了产生QEMU trace,需要做两件事: (1) 使用-trace选

路漫漫 其修远 1499

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

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

郑伟强dev的专栏 1192

Android从入门到精通

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

github_38514857的博客 878

高清彩版 Pro iOS Apps Performance Optimization

高清彩版 Pro iOS Apps Performance Optimization

【feature_column处理】- indicator_column(指示列)和embedding_column(嵌入列)

1. 开胃菜 我们先来了解一下tf.feature_column.input_layer def input_layer(features, feature_columns, weight_collections=None, trainable=True, cols_to_vars=None, cols_to_output_tensors=None)

DataAlgo 1485

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

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

Eqiqi的博客 1988

UltraScale+ FPGA中GTY收发器参考时钟的跨Bank共享机制解析

本文深入解析了UltraScale+ FPGA中GTY收发器参考时钟的跨Bank共享机制,详细介绍了时钟布线架构、SLR区域限制及Vivado工程配置要点。通过实际案例和优化建议,帮助工程师解决高速串行通信中的时钟共享问题,提升系统性能。

weixin_29280219的博客 630

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

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

路漫漫 其修远 1106

基于TDOA的chan算法(定位算法)

Chan算法原理 TDOA(TDOA,the time differences of arrival,到达时间差),Chan算法是TDOA定位方法的一个很好用的方法。 Chan算法是非递归双曲线方程组解法,具有解析表达式解,主要特点是:在测量误差服从理想高斯分布时,它的定位精度高、计算量小,并且可以通过增加已确定点的数量来提高算法精度。 该算法的推导前提是基于测量误差为零均值高斯随机变量,对于实际环境中误差较大的测量值,比如在有非视距误差的环境下,该算法的性能会有显著下降。二维情况下,可分为只有三个点参与定

优快云不再更新 2万+

SAP FICO 银企直连

银企直联或者自动付款的目的是和银行做一个接口,把SAP中的到期应付款(也包括预付款)按照一定格式(银行要求的)在审批后发送给银行,请银行按照这个付款指定进行付款,并跟踪付款状态的过程,这个过程在SAP中如何实现呢?根据个人项目经验,客户需求可分为如下三种: 1. 第一种是完全不自动方式,仅批量生成付款凭证,实际的付款还是通过原来的流程执行,和银行没有任何接口; 2. 第二种是半自动方式,这种方式下需要按照银行的要求的格式生成付款条件,然后把付款文件下载下来,通过企业版的网银接口把付款文件进行上载,提交后

IamRunjiang的博客 9288

android性能优化从入门到精通

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

qq_23081779的博客 1765

微信PC端Multi文件夹数据库解析:语音消息导出与转换实战指南

本文提供了一份详细的微信PC端语音消息导出与转换实战指南。通过解析Multi文件夹中的MediaMSG数据库,指导用户定位、解密数据库,并利用Python脚本精准提取SILK格式语音,最终转换为通用的WAV或MP3格式,实现个人语音数据的本地备份与处理。

garlic的博客 581

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

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

2501_92486623的博客 357

DAB协议解读ETSI TS 103 461

数字信号广播( Digital Audio Broadcasting 简称DAB)是继AM、FM传统模拟广播之后的第三代广播--数字信号广播,它提供了接近CD质量的声音,广播及商机无限的附加数据服务,具有抗噪声、抗干扰、抗电波传播衰落、适合高速移动接收等优点,保证固定、携带及移动时接收信号的质量。DAB的原始版本使用MP2音频编解码器。该系统的升级版本于2007年2月发布,称为DAB+,它使用基于改进的离散余弦变换(MDCT)的HE-AACv2(AAC+)音频编解码器。

qflook的博客 4477

AXI2APB_bridge 设计

此处研究AHB Slave到 APB master的桥接器,实现接口转化,例如下图之后是参数描述

Starry__的博客 4035

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

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

gitblog_00510的博客 3万+

如何修改网页中的文本内容改成自己希望的数值?

本篇文章主要讲解,通过浏览器命令和浏览器自带的F12开发者工具,进行修改网页内容的方法教程 日期:2021年12月5日 作者:任聪聪 一、通过F12开发者工具进行修改 进入方式汇总: 1.右击鼠标,显示菜单找到审查 2.通过快捷键F12进入,笔记本需要先关闭fnlk功能键。 开发者工具介绍 说明: 1.表示选择元素,点击后可以选择文本的元素所在地 2.表示显示方式,手机还是电脑 3.表示div元素,点击后可以展开,对div内的html和文本进行编辑。 双击文本,即可进行修改成自己想要的,但是刷新后.

任聪聪的博客 2万+

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

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

the shy 127

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

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

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

gitblog_00738的博客 666

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

上一篇: Tasks and Back Stack(未完成)
下一篇: 精通安卓性能优化-第一章(七)
北冥_有鱼
博客等级 码龄19年 14粉丝 0原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值