最近一直在做内存和 ANR 相关的优化,接下来我将会花几篇文章梳理一下内存相关的优化,以及我是如何将 OOM 崩溃率下降 90%。今天这篇文章主要介绍内存相关的知识点,以及那些因素会导致 OOM 崩溃和相对应的解决方案,所以通过这篇文章你将学习到以下内容:什么是虚拟内存和物理内存32 位和 64 位设备可用虚拟内存分别是多少为什么虚拟内存不足主要发生在 32 位的设备上如何解决虚拟内存不足的问题A
2022-12-15 michael007js 120
在上一章,我们已经从操作系统的维度了解了一个进程的内存模型。这一节,我们将维度继续上升,从应用层出发看看一个 App 运行时的内存模型是怎样的。从 App 运行时的内存模型中我们可以知道导致内存增长的源头,从源头出发,可以更有目的去治理内存,还能进一步分析引起增长的代码逻辑或者数据。为了让大家深入掌握 App 运行时的内存模型,这一节的内容按照由外到内、逐步深入的原则,分为了 3 个部分:内存描述
2022-12-15 michael007js 558
我们知道,手机的内存是有限的,如果应用内存占用过大,轻则引起卡顿,重则导致应用崩溃或被系统强制杀掉,更严重的情况下会影响应用的留存率。因此,内存优化是性能优化中非常重要的一部分。但是,很多开发者对内存的认识还停留在应用开发这一层,平时只是参考网上的方案,对内存进行比较浅显的优化。想要深入进行内存优化,我们需要从操作系统的层面了解内存是怎么管理的,又是如何被使用的。可能会有人疑问:“为什么做个内存优
2022-12-15 michael007js 117
前言上一篇(安卓语言基础之Kotlin高阶函数——Lambda表达式(一) - 掘金 (juejin.cn))我们学习了Kotlin中Lambda表达式与其在集合的函数式API中的使用方法,本篇我们继续学习,去探究Lambda编程在安卓Kotlin开发中的其他地方的运用方法。正篇除了我们上一篇所说的一些集合的函数式API,其实Kotlin中调用Java方法也能用函数式API,也是使用了Lambda
2022-12-15 michael007js 127
前言前段时间在技术交流群里看一群大佬在说Kotlin的高阶函数,看起来花里胡哨,对我这个以Java语言为生产工具的安卓开发十分不友好,但是为了能以后和他们一起更好的水群,我开始学习高阶函数,去了解它的魅力。我将本篇归属于安卓开发基础必备系列,因为这部分知识属于开发语言基础知识,此外,高阶函数也是很多人推崇Kotlin的魅力所在。# 正篇首先我们看看Lambda编程,这个编程方式还是我在用Java开
2022-12-15 michael007js 153
复杂度软件的首要技术使命是“管理复杂度” —— 《代码大全》因为低复杂度才能降低理解成本和沟通难度,提升应对变更的灵活性,减少重复劳动,最终提高代码质量。架构的目的在于“将复杂度分层”复杂度为什么要被分层?若不分层,复杂度会在同一层次展开,这样就太 ... 复杂了。举一个复杂度不分层的例子:小李:“你会做什么菜?”小明:“我会做用土鸡生的土鸡蛋配上切片的番茄,放点油盐,开火翻炒的番茄炒蛋。”听了小
2022-12-14 michael007js 72
复杂度软件的首要技术使命是“管理复杂度” —— 《代码大全》因为低复杂度才能降低理解成本和沟通难度,提升应对变更的灵活性,减少重复劳动,最终提高代码质量。架构的目的在于“将复杂度分层”复杂度为什么要被分层?若不分层,复杂度会在同一层次展开,这样就太 ... 复杂了。举一个复杂度不分层的例子:小李:“你会做什么菜?”小明:“我会做用土鸡生的土鸡蛋配上切片的番茄,放点油盐,开火翻炒的番茄炒蛋。”听了小
2022-12-14 michael007js 59