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

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

优化Fibonacci

我们要做的第一个优化是消除一个方法调用,如Listing1-3所示。因为这个实现是递归的,在方法中移除一个函数调用会显著的减少总的方法调用次数。比如,computeRecursively(30)产生2692537次调用,而computeRecursivelyWithLoop(30)仅产生1346269次。然而,根据上面定义的标准,100毫秒或者更少的时间,这个方法的性能还是不可以接受,computeRecursivelyWithLoop(30)需要大约270毫秒。

Listing 1-3 优化Fibonacci序列的递归实现

public class Fibonacci {
    public static long computeRecursivelyWithLoop(int n) {
        if(n>1) {
            long result = 1;
            do {
                result += computeRecursivelyWithLoop(n-2);
                n--;
            } while(n>1);
            return result;
        }
        return n;
    }
}


NOTE:这不是一个真正的尾递归优化。

从递归到迭代

第二个优化,我们将递归实现切换成迭代实现。递归算法对开发者来说声誉很差,特别是在内存不多的嵌入式系统中,因为它们会消耗很多的栈空间,还有像我们刚刚看到的,太多的方法调用。即使性能是可以接受的,一个递归算法可能会引起栈溢出,造成程序crash。因此会尽可能选择迭代算法。Listing 1-4给出了Fibonacci序列的一个教科书式的迭代算法实现。

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

public class Fibonacci {
    public static long computeIteratively(int n) {
        if(n>1) {
            long a = 0, b = 1;
            do {
                long tmp = b;
                b += a;
                a = tmp;
            } while (--n > 1);
            return b;
        }
        return n;
    }
}

因为第N个Fibonacci序列的值是前面两个值的简单加和,一个简单的循环就可以做到。和递归算法相比,迭代算法的复杂度同样大幅降低,因为它是线性的。结果,它的性能同样更好,computeIteratively(30)需要少于1毫秒计算完成。因为它的线性特性,你可以使用这样一个算法去计算序列第30个以外的值。比如,computeIteratively(50000)需要大约2毫秒,通过线性投影推算,你可以猜测computeIteratively(500000)将需要20到30毫秒。

尽管这样的性能已经远远超越了可接受的目标(100ms或者更少),对这个算法做一点修改可以得到更快的结果,如Listing 1-5所示。这个新的版本每次循环计算两个值,总的迭代次数减少到一半。由于在最初的迭代算法中迭代次数可能是奇数,对a和b的初始值做相应的修改:当n是奇数的时候,序列从a=0和b=1开始;当n是偶数的时候,序列从a=1和b=1(Fib(2)=1)开始。

Listing 1-5 修改过的Fibonacci序列的迭代实现

public class Fibonacci {
    public static long computeIterativelyFaster(int n) {
        if (n>1) {
            long a, b = 1;
            n--;
            a = n & 1;
            n /= 2;
            while (n-- > 0) {
                a += b;
                b += a;
            }
            return b;
        }
        return n;
    }
}

结果显示这个修改后的算法运行速度大概是原算法的2倍。

尽管迭代的实现方式已经很快,它有一个主要的问题:可能不会返回正确的结果。问题在于返回的结果通过64位的long保存。64位可以容纳的最大的Fibonacci数值是7,540,113,804,746,346,429,第92个Fibonacci值。尽管当传入值大于92的时候,这个方法会返回而不会发生程序crash,但是因为溢出会返回一个不正确的值:第93个Fibonacci值将会是一个负值!递归实现有同样的限制,不过用户要非常有耐心才会发现。

NOTE:Java指定了所有原子类型的大小(除了boolean型):long, 64位;int, 32位;short, 16位。所有的整型数值是有符号数。


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

相关推荐

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

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

学无止境 1222

Android性能优化总结(史上最全总结)

Android中的性能优分为以下几个方面: 布局优化 绘制优化 网络优化 安装包优化 内存优化。 卡顿优化 耗电优化 ListView/RecycleView及Bitmap优化 稳定性优化 一.布局优化 在Android种系统对View进行测量、布局和绘制时,都是通过对View数的遍历来进行操作的。如果一个View数的高度太高就会严重影响测量、布局和绘制的速度。Google也在其API文档中建...

恬静释然的博客 6846

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

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

weixin_34326558的博客 268

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面试指南与参考答案——基于领星安卓开发职位要求

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

郑伟强dev的专栏 1192

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

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

Eqiqi的博客 1988

数据工程师——ETL

文章摘要 ETL(数据抽取、转换、加载)是数据处理的核心流程,负责将分散数据源整合为高质量数据。ETL与ELT的主要区别在于转换步骤顺序,分别适用于不同规模数据场景。数据仓库通过ETL从多个数据源集成数据,支持分析决策。维度建模中的事实表记录业务指标,维度表提供上下文信息。缓慢变化维度(SCD)处理随时间变化的维度数据,常见类型包括直接覆盖型、新增版本型等。数据清洗解决数据缺失、重复、错误等问题,确保数据质量。数据血缘记录数据流转路径,便于问题排查和影响分析。常用ETL工具如Kettle通过转换和作业实现数

weixin_45729710的博客 1558

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

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

路漫漫 其修远 1106

深度解析跨境支付之业务架构

详解跨境支付之业务架构

weixin_47493863的博客 1877

Pytorch版deeplabv3+环境配置训练自己的数据集

参考:https://blog.youkuaiyun.com/qq_36766560/article/details/110009622?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522161594607816780266214828%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fall.%2522%257D&request_id=161594607816780266214828

Ring__Rain的博客 1万+

android性能优化从入门到精通

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

qq_23081779的博客 1765

Calibre LVS错误排查实战:从Innovus到GDS的完整调试流程(附常见错误解析)

本文详细介绍了数字IC后端设计中,从Innovus工具输出数据到Calibre LVS物理验证的完整调试流程。文章系统性地讲解了LVS错误排查的方法论,包括报告解读、图形化定位以及针对器件不匹配、电源网络错误、短路开路等常见问题的深度解析与解决方案,旨在帮助工程师高效完成版图与原理图的一致性检查。

weixin_29218963的博客 775

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

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

2501_92486623的博客 357

别再只调陀螺仪了!用OpenCV实现基于透视变换的EIS防抖,实测效果媲美手机

本文深入探讨了基于透视变换的EIS电子稳像技术,通过OpenCV实现高阶防抖算法,效果媲美主流手机厂商方案。详细解析了传统旋转平移模型的局限性,并展示了透视变换在复杂场景下的优势,包括数学原理、OpenCV实战代码及性能优化技巧,为视频防抖提供了专业解决方案。

weixin_42613501的博客 449

087、DAMO-YOLO Efficient-RepGFPN:重参数化加皇后融合加黄金分割的创新 Neck

DAMO-YOLO的Efficient-RepGFPN创新性Neck结构摘要: 该结构通过三重创新提升目标检测性能: 重参数化卷积:训练时多分支(3x3卷积+1x1卷积+BN分支)提升特征表达能力,推理时合并为单路3x3卷积保证效率; 皇后融合机制:采用可学习权重对不同尺度特征进行自适应加权融合,而非简单相加,通过Softmax归一化权重实现特征选择; 黄金分割连接:优化特征金字塔层间连接方式,按比例分配相邻层特征权重(如P3:P5≈0.618:0.382),减少冗余连接噪声。 实验表明,该结构有效解决了传

ai技术增长的博客 102

ApacheCN 安卓译文集(二)20211226 更新

安卓数据库编程 零、前言 一、在安卓系统上存储数据 二、使用 SQLite 数据库 三、SQLite 查询 四、使用内容供应器 五、查询联系人表 六、绑定到用户界面 七、安卓数据库的实践 八、探索外部数据库 九、收集和存储数据 十、把它们放在一起 安卓设计模式最佳实践 零、前言 一、设计模式 二、创建模式 三、材质模式 四、布局模式 五、结构模式 六、激活模式 七、组合模式 八、复合模式 九、观察模式 十、行为模式 十一、可穿戴模式 十二、社交模式 十三、发布模式 安卓高性能编程 零、前言 .

龙哥盟 4158

射频微波电路设计【1.4】

AppCAD是一组射频设计工具和计算机应用说明,它使射频工程师能以更快和更容易的方式设计他们的产品。该软件的理 念是为工程师提供一个“个人设计助理”,即功能强大、快速和容易使用的辅助设计工具。该软件包括如下基本功能: ·各种传输线电气参数的分析与计算;·各种匹配电路的分析与计算;·各种有源和无源简单电路的分析与计算;·射频系统指标的计算:增益、噪声系数、三阶交调、信噪比、灵敏度等;·器件可靠性分析。

qq_43416206的博客 2317

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

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

the shy 127

【Bug已解决】NCCL timeout for validation 解决方案

训练用多卡 DDP / FSDP 正常,但一到或者进程直接 hang 在 eval 的某个集合通信上。最迷惑的是:训练阶段(有集合通信)完全正常,偏偏 eval 阶段(看起来更轻量)超时。因为 eval 阶段某些 rank 没参与 collective,导致参与的那部分 rank 永远等不到同伴。

一键难忘的博客 141

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

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

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

gitblog_00510的博客 3万+

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

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

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

gitblog_01031的博客 1645

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

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

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

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

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

gitblog_00738的博客 666

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

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

gitblog_00491的博客 1005

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

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

gitblog_00660的博客 1060

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

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

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

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值