![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
Android高质量开发一
文章平均质量分 96
模块一 高质量开发 (25讲)
ChinaDragonDreamer
追梦莫空动!
个人公众号:小龙知识库
展开
-
19 | 耗电优化(下):耗电的优化方法与线上监控
相比启动、卡顿、内存和网络的优化来说,可能大多数应用对耗电优化的关注不是太多。当然并不是我们不想做耗电优化,更多时候是感觉有些无从下手。不同于启动时间、卡顿率,耗电在线上一直缺乏一个可以量化的指标。Android 系统通过计算获得的应用耗电数据只是一个估算值,从 Android 4.4 开始,连这个估算值也无法拿到了。当有用户投诉我们应用耗电的时候,我们一般也无所适从,不知道该如何定位、如何分析。耗电优化究竟需要做哪些工作?我们如何快速定位代码中的不合理调用,并且持续监控应用的耗电情况呢?今天我们就一.原创 2020-11-20 09:36:17 · 1359 阅读 · 0 评论 -
18 | 耗电优化(上):从电量优化的演进看耗电分析
曾经有一句笑话说的是“用 Android 手机的男人一定是个好男人,因为他每天必须回家充电,有时候还得 1 天 2 次”。我们现在工作和生活都离不开手机,但是却很难找到一款可以完全信赖、可以使用一整天的手机。在十年前的功能机时代,诺基亚可以做到十几天的超长待机。而现在的智能机时代,7nm 的 CPU、8GB 内存、512GB 的闪存,硬件一直在飞速发展,为什么电池的发展就不适用摩尔定律,电池技术一直没有突破性的进展呢?功耗是手机厂商一直都非常重视的,OPPO 更是直接以“充电 5 分钟,通话 2 小时.原创 2020-11-20 09:08:38 · 1455 阅读 · 0 评论 -
17 | 网络优化(下):大数据下网络该如何监控?
通过上一期的学习,我们对如何打造一个高质量的网络已经有了一个整体的认识。但是这就足够了吗?回想一下,一个网络请求从手机到后台服务器,会涉及基站、光纤、路由器这些硬件设施,也会跟运营商和服务器机房有关。不论是基站故障、光纤被挖断、运营商挟持,还是我们的机房、CDN 服务商出现故障,都有可能会引起用户网络出现问题。你有没有感觉线上经常突发各种千奇百怪的网络问题,很多公司的运维人员每天过得胆战心惊、疲于奔命。“善良”的故障过了一段时间之后莫名其妙就好了,“顽固”的故障难以定位也难以解决。这些故障究竟是如何产.原创 2020-11-16 08:58:41 · 620 阅读 · 1 评论 -
16 | 网络优化(中):复杂多变的移动网络该如何优化?
在 PC 互联网时代,网络优化已经是一项非常复杂的工作。对于移动网络来说,弱网络、网络切换、网络劫持这些问题更加突出,网络优化这项工作也变得更加艰巨。那作为一名移动开发者,面对复杂多变的移动网络我们该如何去优化呢?可能也有人会说,我只要用好 AFNetworking/OkHttp 这些成熟网络库就可以了,并不需要额外去做什么优化。那你确定你真的能用好这些网络库吗?它们内部是怎样实现的、有哪些差异点、哪个网络库更好呢?虽然我们可能只是客户端 App 开发人员,但在关于网络优化还是可以做很多事情的,很多大.原创 2020-11-13 08:57:06 · 1693 阅读 · 1 评论 -
15 | 网络优化(上):移动开发工程师必备的网络优化知识
专栏前面我们已经学习过文件 I/O 和存储优化,相信你已经掌握了文件 I/O 和存储的性能分析以及优化思路。今天我们就再接再厉,继续学习系统中另外一种常见的 I/O——网络 I/O。我在写今天的文章时,回想了一下大学期间学的那本几百页厚的《计算机网络》,当时学得也是云里雾里,网络的确涉及了方方面面太多的知识。那我们作为移动开发者来说,都需要掌握哪些必备的网络知识呢?文件 I/O 跟网络 I/O 又有哪些差异呢?今天我们不谈“经典巨著”,一起来解决移动开发工程师面对的网络问题。网络基础知识现在已经很.原创 2020-11-12 08:53:39 · 1600 阅读 · 1 评论 -
14 | 存储优化(下):数据库SQLite的使用和优化
我们先来复习一下前面讲到的存储方法的使用场景:少量的 Key Value 数据可以直接使用 SharedPreferences,稍微复杂一些的数据类型也可以通过序列化成 JSON 或者 Protocol Buffers 保存,并且在开发中获取或者修改数据也很简单。不过这几种方法可以覆盖所有的存储场景吗?数据量在几百上千条这个量级时它们的性能还可以接受,但如果是几万条的微信聊天记录呢?而且如何实现快速地对某几个联系人的数据做增删改查呢?对于大数据的存储场景,我们需要考虑稳定性、性能和可扩展性,这个时候就.原创 2020-11-11 09:40:25 · 2471 阅读 · 2 评论 -
13 | 存储优化(中):如何优化数据存储?
“将特定结构的数据转化为另一种能被记录和还原的格式”,这是我在上一期对存储下的一个定义。再来复习一下数据存储的六个关键要素:正确性、时间开销、空间开销、安全、开发成本和兼容性。我们不可能同时把所有要素都做到最好,所谓数据存储优化就是根据自己的使用场景去把其中的一项或者几项做到最好。更宽泛来讲,我认为数据存储不一定就是将数据存放到磁盘中,比如放到内存中、通过网络传输也可以算是存储的一种形式。或者我们也可以把这个过程叫作对象或者数据的序列化。对于大部分的开发者来说,我们不一定有精力去“创造”一种数据序列.原创 2020-11-11 08:58:07 · 1376 阅读 · 0 评论 -
12 | 存储优化(上):常见的数据存储方法有哪些?
通过专栏前面我讲的 I/O 优化基础知识,相信你肯定了解了文件系统和磁盘的一些机制,以及不同 I/O 方式的使用场景以及优缺点,并且可以掌握如何在线上监控 I/O 操作。万丈高楼平地起,在理解并掌握这些基础知识的同时,你肯定还想知道如何利用这些知识指导我们写出更好的代码。今天我来结合 Android 系统的一些特性,讲讲开发过程中常见存储方法的优缺点,希望可以帮你在日常工作中如何做出更好的选择。Android 的存储基础在讲具体的存储方法之前,我们应该对 Android 系统存储相关的一些基础知识.原创 2020-11-10 09:17:42 · 1400 阅读 · 0 评论 -
11 | I/O优化(下):如何监控线上I/O操作?
通过前面的学习,相信你对 I/O 相关的基础知识有了一些认识,也了解了测量 I/O 性能的方法。但是在实际应用中,你知道有哪些 I/O 操作是不合理的吗?我们应该如何发现代码中不合理的 I/O 操作呢?或者更进一步,我们能否在线上持续监控应用程序中 I/O 的使用呢?今天我们就一起来看看这些问题如何解决。I/O 跟踪在监控 I/O 操作之前,你需要先知道应用程序中究竟有哪些 I/O 操作。我在专栏前面讲卡顿优化的中提到过,Facebook 的 Profilo 为了拿到 ftrace 的信息,使用了.原创 2020-11-10 08:55:46 · 510 阅读 · 1 评论 -
10 | I/O优化(中):不同I/O方式的使用场景是什么?
今天是 2019 年的第一天,在开始今天的学习前,先要祝你新年快乐、工作顺利。I/O 是一个非常大的话题,很难一次性将每个细节都讲清楚。对于服务器开发者来说,可以根据需要选择合适的文件系统和磁盘类型,也可以根据需要调整内核参数。但对于移动开发者来说,我们看起来好像做不了什么 I/O 方面的优化?事实上并不是这样的,启动优化中“数据重排”就是一个例子。如果我们非常清楚文件系统和磁盘的工作机制,就能少走一些弯路,减少应用程序 I/O 引发的问题。在上一期中,我不止一次的提到 Page Cache 机制,.原创 2020-11-09 09:18:21 · 575 阅读 · 1 评论 -
09 | I/O优化(上):开发工程师必备的I/O优化知识
250GB 容量,512MB DDR4 缓存,连续读取不超过 550MB/s,连续写入不超过 520MB/s。“双十一”在天猫看到一款固态硬盘有上面的这些介绍,这些数字分别代表了什么意思?在专栏前面卡顿和启动优化里,我也经常提到 I/O 优化。可能很多同学觉得 I/O 优化不就是不在主线程读写大文件吗,真的只有这么简单吗?那你是否考虑过,从应用程序调用 read() 方法,内核和硬件会做什么样的处理,整个流程可能会出现什么问题?今天请你带着这些疑问,我们一起来看看 I/O 优化需要的知识。I/O..原创 2020-11-09 08:57:47 · 841 阅读 · 3 评论 -
08 | 启动优化(下):优化启动速度的进阶方法
专栏上一期,我们一起梳理了应用启动的整个过程和问题,也讲了一些启动优化方法,可以说是完成了启动优化工作最难的一部分。还可以通过删掉或延后一些不必要的业务,来实现相关具体业务的优化。你学会了这些工具和方法,是不是觉得效果非常不错,然后美滋滋地向老大汇报工作成果:“启动速度提升 30%,秒杀所有竞品好几条街”。“还有什么方法可以做进一步优化吗?怎么证明你秒杀所有的竞品?如何在线上衡量启动优化的效果?怎么保障和监控启动速度是否变慢?”,老大一口气问了四个问题。面对这四个问题,你可不能一脸懵。我们的应用启动是.原创 2020-11-06 09:13:32 · 556 阅读 · 2 评论 -
07 | 启动优化(上):从启动过程看启动速度优化
超市排队结账,扫码支付启动十几秒都还没完成,只能换一个工具支付?想买本书充实一下,页面刷出来时候十几秒都不能操作,那就换一个应用购买?用户如果想打开一个应用,就一定要经过“启动”这个步骤。启动时间的长短,不只是用户体验的问题,对于淘宝、京东这些应用来说,会直接影响留存和转化等核心数据。对研发人员来说,启动速度是我们的“门面”,它清清楚楚可以被所有人看到,我们都希望自己应用的启动速度可以秒杀所有竞争对手。那启动过程究竟会出现哪些问题?我们应该怎么去优化和监控应用的启动速度呢?今天我们一起来看看..原创 2020-11-06 08:50:19 · 605 阅读 · 1 评论 -
06补充篇 | 卡顿优化:卡顿现场与卡顿分析
我们使用上一期所讲的插桩或者 Profilo 的方案,可以得到卡顿过程所有运行函数的耗时。在大部分情况下,这几种方案的确非常好用,可以让我们更加明确真正的卡顿点在哪里。但是,你肯定还遇到过很多莫名其妙的卡顿,比如读取 1KB 的文件、读取很小的 asset 资源或者只是简单的创建一个目录。为什么看起来这么简单的操作也会耗费那么长的时间呢?那我们如何通过收集更加丰富的卡顿现场信息,进一步定位并排查问题呢?卡顿现场我先来举一个线上曾经发现的卡顿例子,下面是它的具体耗时信息。从图上看,Activit.原创 2020-11-04 10:54:17 · 955 阅读 · 0 评论 -
06 | 卡顿优化(下):如何监控应用卡顿?
“我在秒杀 iPhone XS 的支付页面卡了 3 秒,最后没抢到”,用户嘶声力竭地反馈了一个卡顿问题。“莫慌莫慌”,等我打开 Android Studio, 用上一讲学到的几个工具分析一下就知道原因了。“咦,在我这里整个支付过程丝滑般流畅”。这个经历让我明白,卡顿跟崩溃一样需要“现场信息”。因为卡顿的产生也是依赖很多因素,比如用户的系统版本、CPU 负载、网络环境、应用数据等。脱离这个现场,我们本地难以复现,也就很难去解决问题。但是卡顿又非常影响用户体验的,特别是发生在启动、聊天、支付这些关键场景.原创 2020-11-04 10:26:07 · 888 阅读 · 0 评论 -
05 | 卡顿优化(上):你要掌握的卡顿分析方法
“我的后羿怎么动不了!”,在玩《王者荣耀》的时候最怕遇到团战时卡得跟幻灯片一样。对于应用也是这样,我们经常会听到用户抱怨:“这个应用启动怎么那么慢?”“滑动的时候怎么那么卡?”。对用户来说,内存占用高、耗费电量、耗费流量可能不容易被发现,但是用户对卡顿特别敏感,很容易直观感受到。另一方面,对于开发者来说,卡顿问题又非常难以排查定位,产生的原因错综复杂,跟 CPU、内存、磁盘 I/O 都可能有关,跟用户当时的系统环境也有很大关系。那到底该如何定义卡顿呢?在本地有哪些工具可以帮助我们更好地发现和排查问题呢.原创 2020-11-04 10:06:34 · 1579 阅读 · 0 评论 -
04 | 内存优化(下):内存优化这件事,应该从哪里着手?
在掌握内存相关的背景知识后,下一步你肯定想着手开始优化内存的问题了。不过在真正开始做内存优化之前,需要先评估内存对应用性能的影响,我们可以通过崩溃中“异常退出” 和 OOM 的比例进行评估。另一方面,低内存设备更容易出现内存不足引起的异常和卡顿,我们也可以通过查看应用中用户的手机内存在 2GB 以下所占的比例来评估。所以在优化前要先定好自己的目标,这一点非常关键。比如针对 512MB 的设备和针对 2GB 以上的设备,完全是两种不同的优化思路。如果我们面向东南亚、非洲用户,那对内存优化的标准就要变得更苛.原创 2020-11-04 09:43:13 · 387 阅读 · 1 评论 -
03 | 内存优化(上):4GB内存时代,再谈内存优化
在写今天这篇文章前,我又翻了翻三年前我在 WeMobileDev 公众号写过的《Android 内存优化杂谈》,今天再看,对里面的一句话更有感触:“我们并不能将内存优化中用到的所有技巧都一一说明,而且随着 Android 版本的更替,可能很多方法都会变的过时”。三年过去了,4GB 内存的手机都变成了主流。那内存优化是不是变得不重要了?如今有哪些技巧已经淘汰,而我们又要升级什么技能呢?今天在 4GB 内存时代下,我就再来谈谈“内存优化”这个话题。移动设备发展Facebook 有一个叫device-y.原创 2020-11-04 09:24:49 · 873 阅读 · 3 评论 -
02 | 崩溃优化(下):应用崩溃了,你应该如何去分析?
在侦探漫画《名侦探柯南》中,无论柯南走到哪里都会遇到新的“案件”,这也很像程序员的“日常”,我们每天工作也会遇到各种各样的疑难问题,“崩溃”就是其中比较常见的一种问题。解决崩溃跟破案一样需要经验,我们分析的问题越多越熟练,定位问题就会越快越准。当然这里也有很多套路,比如对于“案发现场”我们应该留意哪些信息?怎样找到更多的“证人”和“线索”?“侦查案件”的一般流程是什么?对不同类型的“案件”分别应该使用什么样的调查方式?“真相永远只有一个”,崩溃也并不可怕。通过今天的学习,希望你能成为代码届的名侦探柯南.原创 2020-11-04 09:06:43 · 335 阅读 · 1 评论 -
01 | 崩溃优化(上):关于“崩溃”那些事儿
01 | 崩溃优化(上):关于“崩溃”那些事儿 在各种场合遇到其他产品的开发人员时,大家总忍不住想在技术上切磋两招。第一句问的通常都是“你们产品的崩溃率是多少?”程序员 A 自豪地说: “百分之一。”旁边的程序员 B 鄙视地看了一眼,然后喊到: “千分之一!”“万分之一” ,程序员 C 说完之后全场变得安静起来。 崩溃率是衡量一个应用质量高低的基本指标,这一点是你我都比较认可的。不过你说的“万分之一”就一定要比我说的“百分之一” 更好吗?我觉得,这个问题其实并不仅仅是比较两个数值这么简单。 今天原创 2020-10-28 10:11:01 · 808 阅读 · 0 评论