
Android 开发
文章平均质量分 95
Android 开发
_Rye_
左手代码右手诗
一行代码一行诗
展开
-
16 | 网络优化(中):复杂多变的移动网络该如何优化?
移动技术发展到今天,跨终端和跨技术栈的联合优化会变得越来越普遍。有的时候我们需要跳出客户端开发的视角,从更高的维度去思考整个大网络平台。当然网络优化的水还是非常深的,有时候我们需要对协议层也有比较深入的研究,也要经常关注国外的一些新的研究成果。2018 年随着工信部发布《推进互联网协议第六版(IPv6)规模部署行动计划》的通知,所有的云提供商需要在 2020 年完成 IPv6 的支持。原创 2024-08-28 15:54:23 · 1526 阅读 · 0 评论 -
15 | 网络优化(上):移动开发工程师必备的网络优化知识
从网络通信发展的历程来说,从 2G 到 4G 经历了十几年的时间,这背后离不开几百万个基站、几亿个路由器以及各种各样的专利支持。虽然网络标准不停地演进,不过受限于基建,它的速度看起来很快,但是又很慢。那对我们自己或者应用会有哪些思考呢?HTTP 2.0、HTTP 3.0(QUIC)等网络技术一直在向前演进,我们需要坚持不懈地学习,思考它们对我们可以产生哪些影响,这是对网络“快”的思考。原创 2024-08-23 14:31:05 · 1076 阅读 · 0 评论 -
14 | 存储优化(下):数据库SQLite的使用和优化
数据库存储是一个开发人员的基本功,清楚 SQLite 的底层机制对我们的工作会有很大的指导意义。掌握了 SQLite 数据库并发的机制,在某些时候我们可以更好地决策应该拆数据表还是拆数据库。新建一个数据库好处是可以隔离其他库并发或者损坏的情况,而坏处是数据库初始化耗时以及更多内存的占用。一般来说,单独的业务都会使用独立数据库,例如专门的下载数据库、朋友圈数据库、聊天数据库。但是数据库也不宜太多,我们可以有一个公共数据库,用来存放一些相对不是太大的数据。原创 2024-08-21 14:58:46 · 1238 阅读 · 0 评论 -
13 | 存储优化(中):如何优化数据存储?
对于优化存储来说,不同的应用关注点可能不太一样。对小应用来说,可能开发成本是最重要的,我们希望开发效率优先;对于成熟的应用来说,性能会更加重要。因此选择什么样的存储方案,需要结合应用所处的阶段以及使用场景具体问题具体分析。无论是优化某个存储方案的性能,还是应用整体的 ROM 存储,我们可能对存储监控关注比较少。而如果这块出现问题,对用户的体验影响还是非常大的。例如我们知道微信占用的 ROM 空间确实不小,为了解决这个问题,特别推出了空间清理的功能,而且在 ROM 空间不足等场景,会弹框提示用户操作。原创 2024-08-20 17:47:32 · 1165 阅读 · 0 评论 -
12 | 存储优化(上):常见的数据存储方法有哪些?
虽然 SharedPreferences 和 ContentProvider 都是我们日常经常使用的存储方法,但是里面的确会有大大小小的暗坑。所以我们需要充分了解它们的优缺点,这样在工作中可以更好地使用和优化。如何在合适的场景选择合适的存储方法是存储优化的必修课,你应该学会通过正确性、时间开销、空间开销、安全、开发成本以及兼容性这六大关键要素来分解某个存储方法。原创 2024-08-20 16:03:53 · 1015 阅读 · 0 评论 -
11 | I/O优化(下):如何监控线上I/O操作?
今天我们学习了如何在应用层面监控 I/O 的使用情况,从实现上尝试了 Java Hook 和 Native Hook 两种方案,最终考虑到性能和兼容性,选择了 Native Hook 方案。对于 Hook 方案的选择,在同等条件下我会优先选择 Java Hook 方案。但无论采用哪种 Hook 方案,我们都需要耐心地查看源码、分析调用流程,从而寻找可以利用的地方。原创 2024-08-19 17:18:57 · 896 阅读 · 0 评论 -
10 | I/O优化(中):不同I/O方式的使用场景是什么?
在性能优化的过程中,我们通常关注最多的是 CPU 和内存,但其实 I/O 也是性能优化中比较重要的一部分。今天我们首先学习了 I/O 整个流程,它包括应用程序、文件系统和磁盘三部分。接着我介绍了多线程同步 I/O、异步 I/O 和 mmap 这几种 I/O 方式的差异,以及它们在实际工作中适用的场景。无论是文件系统还是磁盘,涉及的细节都非常多。而且随着技术的发展,有些设计就变得过时了,比如 FAT32 在设计的时候,当时认为单个文件不太可能超过 4GB。原创 2024-08-19 16:12:05 · 1016 阅读 · 0 评论 -
09 | I/O优化(上):开发工程师必备的I/O优化知识
在性能优化的过程中,我们关注最多的是 CPU 和内存,I/O 也是性能优化中比较重要的一部分。今天我们学习 I/O 处理的整个流程,它包括应用程序、文件系统和磁盘三个部分。不过 I/O 这个话题真的很大,在课后需要花更多时间学习课后练习中的一些参考资料。LPDDR5、UFS 3.0 在 2019 年面世,有些同学会想,随着硬件越来越牛,我们根本就不需要去做优化了。但是一方面考虑到成本的问题,在嵌入式、IoT 等一些场景的设备硬件不会太好;原创 2024-08-12 11:27:19 · 981 阅读 · 0 评论 -
08 | 启动优化(下):优化启动速度的进阶方法
今天我们学习了一些与业务无关的启动优化方法,可以进一步减少启动耗时,特别是减少磁盘 I/O 可能带来的波动。然后我们探讨了一些黑科技对启动的影响,对于黑科技我们需要两面看,在选择时也要慎重。最后我们探讨了如何在实验室和线上更好地测量和监控启动速度。启动优化需要耐得住寂寞,把整个流程摸清摸透,一点点把时间抠出来,特别是对于低端机和系统繁忙的场景。而数据重排的优化,对我有非常大的启发,帮助我开发了一个新的方向。也让我明白了,当我们足够熟悉底层的知识时,可以利用系统的特性去做更加深层次的优化。原创 2024-08-09 17:24:52 · 862 阅读 · 0 评论 -
07 | 启动优化(上):从启动过程看启动速度优化
今天我们首先学习了启动的整个流程,其中比较关键的是 4 个阶段。在这 4 个阶段中,用户可能会出现“点击图标很久都不响应“”首页显示太慢“和”首页显示后无法操作“这 3 个问题。接着我们学习了启动优化和监控的一些常规方法。针对不同的业务场景、不同性能的机器,需要采用不同的策略。有些知识点似乎比较“浅尝辄止”,我更希望你能够通过学习和实践将它们丰富起来。我讲到的大部分内容都是跟业务相关,业务的梳理和优化也是最快出成果的。原创 2024-08-09 15:24:10 · 685 阅读 · 0 评论 -
06补充篇 | 卡顿优化:卡顿现场与卡顿分析
今天我们从一个简单的卡顿问题出发,一步一步演进出解决这个问题的三种思路。其中 Java 实现的方案是大部分同学首先想到的方案,它虽然简单稳定,不过存在信息不全、性能差等问题。可能很多同学认为问题可以解决就算万事大吉了,但我并不这样认为。我们应该继续敲问自己,如果再出现类似的问题,我们是否也可以采用相同的方法去解决?这个方案的代价对用户会带来多大的影响,是否还有优化的空间?只有这样,才会出现文中的方案二和方案三,解决方案才会一直向前演进,做得越来越好。也只有这样,我们才能在追求卓越的过程中快速进步。原创 2024-08-07 09:23:44 · 1230 阅读 · 0 评论 -
06 | 卡顿优化(下):如何监控应用卡顿?
今天我们学习了卡顿监控的几种方法。随着技术的深入,我们发现了旧方案的一些缺点,通过不断地迭代和演进,寻找更好的方案。Facebook 的 Profilo 实现了快速获取 Java 堆栈,其实它参考的是 JVM 的 AsyncGetCallTrace 思路,然后适配 Android Runtime 的实现。systrace 使用的是 Linux 的 ftrace,Simpleperf 参考了 Linux 的 perf 工具。原创 2024-08-05 11:26:05 · 1581 阅读 · 0 评论 -
05 | 卡顿优化(上):你要掌握的卡顿分析方法
在写今天的文章,也就是分析卡顿的基础知识和四种 Android 卡顿排查工具时,越发觉得底层基础知识的重要性。Android 底层基于 Linux 内核,像 systrace、Simpleperf 也是利用 Linux 提供的机制实现,因此学习一些 Linux 的基础知识,对于理解这些工具的工作原理以及排查性能问题,都有很大帮助。另一方面,虽然很多大厂有专门的性能优化团队,但我觉得鼓励和培养团队里的每一个人都去关注性能问题更加重要。我们在使用性能工具的同时,要学会思考,应该知道它们的原理和局限性。原创 2024-07-31 15:24:18 · 1374 阅读 · 0 评论 -
04 | 内存优化(下):内存优化这件事,应该从哪里着手?
在具体进行内容优化前,我们首先要问清楚自己几个问题,比如我们要优化到什么目标、内存对我们造成了多少异常和卡顿。只有在明确了应用的现状和优化目标后,我们才能去进行下一步的操作。在探讨了内存优化的思路时,针对不同的设备、设备不同的情况,我们希望可以给用户不同的体验。这里我主要讲到了关于 Bitmap 内存优化和内存泄漏排查、监控的一些方法。最后我提到了怎样在线上监控内存的异常情况,通常内存异常率、触顶率这些指标对我们很有帮助。原创 2024-07-29 16:51:04 · 1272 阅读 · 0 评论 -
03 | 内存优化(上):4GB内存时代,再谈内存优化
LPDDR5 将在明年进入量产阶段,移动内存一直向着更大容量、更低功耗、更高带宽的方向发展。伴随内存的发展,内存优化的挑战和解决方案也不断变化。而内存优化又是性能优化重要的一部分,今天我讲到了很多的异常和卡顿都是因为内存不足引起的,并在最后讲述了如何在日常开发中分析和测量内存的使用情况。一个好的开发者并不满足于做完需求,我们在设计方案的时候,还需要考虑要使用多少的内存,应该怎么去管理这些内存。在需求完成之后,我们也应该去回归需求的内存情况,是否存在使用不当的地方,是否出现内存泄漏。原创 2024-07-29 15:15:42 · 1140 阅读 · 0 评论 -
02 | 崩溃优化(下):应用崩溃了,你应该如何去分析?
今天我们介绍了崩溃问题的一些分析方法、特殊技巧、以及疑难和常见问题的解决方法。当然崩溃分析要具体问题具体分析,不同类型的应用侧重点可能也有所不同,我们不能只局限在上面所说的一些方法。讲讲自己的一些心得体会,在解决崩溃特别是一些疑难问题时,总会觉得患得患失。有时候解了一个问题,发现其他问题也跟“开心消消乐”一样消失了。有时候有些问题“解不出来郁闷,解出来更郁闷”,可能只是一个小的代码疏忽,换来了一个月的青春和很多根白头发。原创 2024-07-19 11:39:05 · 808 阅读 · 0 评论 -
01 | 崩溃优化(上):关于“崩溃”那些事儿
今天,讲了 Android 的两种崩溃,重点介绍了 Native 崩溃的捕获流程和一些难点。做一个高可用的崩溃收集 SDK 并不容易,它背后涉及 Linux 信号处理以及内存分配、汇编等知识,当你内功修炼得越深厚,学习这些底层知识就越得心应手。接着,我们讨论了崩溃率应该如何去计算,崩溃率的高低跟应用时长、复杂度、收集 SDK 有关。不仅仅是崩溃率,我们还学习了目前 ANR 采集的方式以及遇到的问题,最后提出了异常率这一个新的稳定性监控指标。原创 2024-07-18 09:54:16 · 1059 阅读 · 0 评论 -
导读 | 如何打造高质量的应用?
看到这里可能你会有这样的疑问,我们在小公司根本没有机会学习到这些东西呀?确实如此,个人与公司一起成长是最快速,也是非常难得的事情,但并不一定人人都会有这样的机会。从我自己的经验来看,在搜狗、微信会遇到各种各样的疑难问题,也可以有很多时间去研究,让我在解决问题的过程中获得成长。幸运的是现在大家都更加乐于去分享,在专栏和技术会议中,我们可以看到很多成熟的解决问题的经验和思路,在 GitHub 我们可以找到很多优秀的源代码。在这个环境下,我们需要耐得住寂寞,多抠一些细节,多深入研究,多停下来总结。原创 2024-07-17 11:33:16 · 970 阅读 · 0 评论 -
开篇词 | 焦虑的移动开发者该如何破局?
首先,我认为,移动开发不等于 App 开发,所有新的技术浪潮其实都可以融入到移动开发的体系里,比如 IoT、音视频、边缘计算、VR/AR,我们要做的,只是打好基础,随时准备战斗。我挑选了崩溃、内存、卡顿、启动、I/O、存储、网络、耗电、渲染、安装包体积等比较常见的关键点,为你全面梳理性能优化的经验技巧与方向,帮你学会如何解决已知的存量问题,同时也能及时发现增量问题。是的,现在移动开发已经不再是风口,但是,这并不是说移动开发已经被淘汰,而是说移动开发的发展进入了成熟期,就像 Web 技术一样。原创 2024-07-17 10:56:45 · 827 阅读 · 0 评论