Part1技术文章

过去一周 Android 相关的技术文章精选,以及过去一周发现的经典文章

  1. 向工程腐化开炮 | 治理思路全解:工程质量是任何一个产品,能够快速、高效、稳定地进行业务功能迭代的基础,也是给用户带来良好产品使用体验不可忽视的因素,更是任何一位优秀工程师的期望和卓越追求。而工程腐化,却是任何一个大型工程都不得不面对的问题,其广泛而细碎,隐藏在不易被察觉的“角落”,对工程方方面面均有所影响。

    工程腐化与工程本身相伴相生,贯穿工程生命周期的每一阶段,时间、人、代码、流程、规则,任一因素的变化都会导致腐化发生,从觉察到修补、系统性分析到应对方案制定、再到坦然接受与常态化可持续治理,本文对此逐一道来。

  2. 向死而生:面向失败设计之道、术、技:不同年限的程序员差异到底在哪里?这个问题,我的理解是,除了架构设计能力、项目管理能力、技术规划能力、技术领导力之外,面向失败设计能力也是极其重要的一环。

    业务开发的新同学有时候可能会有迷之自信,觉得自己写的代码与老鸟们没有什么不同。实际上,编写正常流程的业务代码大家的差异不会太大,但是针对异常、边界、不确定性的处理才真正体现一个程序员的功力。老鸟们往往在长期的训练下已经形成多种肌肉记忆,遇到具体问题就会举一反三脑海里冒出诸多面向失败的设计点,从而写出高可用的业务代码。如何去学习面向失败设计的方法论,并慢慢形成自己独有的肌肉记忆,才是新手向老鸟蜕变的康庄大道。

    基于这样的考量,我写了这篇文章,对自己这些年来的一些经验和教训做了一些总结,希望能够抛砖引玉,让更多的老鸟们把自己的经验 share 出来,相互学习共同进步。

  3. 移动端算法优化|CPU 优化技术-NEON 开发进阶:在前面的《CPU 优化技术》系列文章中我们对 NEON 做了系统的介绍和说明,包括 SIMD 和 NEON 概念,NEON 自动向量化以及 NEON intrinsic 指令集等。但是只掌握这些还不足以编写一个性能完善的 NEON 程序,在实际的 NEON 优化工作中我们会遇到如何将标量处理转换为向量处理,如何更高效的处理图像的边界区域等问题。接下来我们会针这些问题进行介绍和说明,让大家可以在实际工作中使用 NEON 来优化程序的性能。

    本文我们会介绍代码如何进行向量化,如何处理向量化的剩余部分,如何处理图像的边界区域,最后会给出一个完整的 NEON 程序实例。

  4. 浅谈软件开发的性能提升:在运行操作软件的,一个操作执行太慢,需要首先分类是 IO 操作密集引起的问题还是 CPU 相关的计算密集型问题,软件的性能优化不管是从编码规范还是工程项目实践上来说,都有很多需要我们作为开发人员注意的方向点。性能优化的目的是为了让程序执行功能变得高效,但同时也不能丧失程序的可维护性和可扩展性。性能优化是一种实验科学,往往是通过不断迭代进行,在每次优化方案实施完毕后需要对程序的优化前后的性能进行对比来验证优化方案的可行性。下面主要从 C 和 C++语言入手进行一些代码性能优化上去分析,助力开发相对高性能的软件。

  5. 相比 XML , Compose 性能到底怎么样?:本文主要从构建性能与运行时两个方面来分析 Compose 的性能,数据主要来源于:Jetpack Compose — Before and after 与 Measuring Render Performance with Jetpack Compose , 想了解更多的同学可以直接点击查看

  6. Flutter 双向聊天列表效果进阶优化:聊天列表是一个很扣细节的场景,在之前的 《Flutter 实现完美的双向聊天列表效果,滑动列表的知识点》里,通过 CustomScrollView 和配置它的 center 从而解决了数据更新时的列表跳动问题,但是这时候又有网友提出了新的问题:上半部分有一大片空白,如何解决?

  7. 1 min guide to learn android development best practices in 2022[1]:In this article, we’ll have a quick look at a few most essential libraries and tips that make your day-to-day app development effective and easy.

  8. Implementing Android 12 Material You's Monet theme engine in Flutter[2]:在安卓 12 的开发过程中,谷歌创建了一个新的主题引擎,代号为 "monet",它根据用户的壁纸生成丰富的粉色调色板。然后,这些颜色被应用到系统的各个部分,它们的值通过用户的应用程序可以调用的 API 提供,从而让应用程序决定它们是否也想重新为它们的用户界面着色。谷歌一直在全力发展 Material You,该公司已经更新了大部分的应用程序,以纳入动态颜色。随着安卓 12L 的发布,"monet "的源代码现在已经提供给 AOSP 了。此前,该主题引擎是 Pixel 专用的。

  9. vandadnp / flutter-tips-and-tricks Public[3]:Flutter 相关的 tips

  10. Flutter 布局指南之 Box 套盒子:对于写过 Flutter 的开发者来说,我敢肯定,大部分的开发者都不能准确预测这次 Hot Reload 之后,布局是否是自己想要的结果。Flutter 的布局与 Native 的布局方式非常不同,所以,了解 Flutter 这茫茫多的布局组件,是我们准确布局的基础。

    在 Flutter 中,有一堆 Box 布局组件,它们可以用来更加精确的调整布局,下面我们就来看看这些 Box 都有哪些作用。

  11. Flutter 混编工程之 Font 桥接:在混编开发中,我们经常遇到要全局替换当前字体的需求,在 Native 开发中,我们通常会加载 Asset 或者下载的字体文件,那么在 Flutter 中,如何直接使用 Native 的字体文件呢?

    毕竟大部分的字体文件都毕竟大,特别是一些字体还有加密策略,如果在 Flutter 中再创建一份字体文件,既浪费空间,而且也是一种重复代码,所以,我们需要在 Flutter 端,获取 Native 的字体文件。

    在 Flutter 中,系统给我们提供了 FontLoader,来动态加载字体,与前面的做法一样,我们创建一个 Native 接口,来获取 Native 传来的 Byte 数据流,并借助 FontLoader 来加载字体。

  12. Rust in the Android platform[4]:安卓平台的代码正确性是每个安卓版本的安全性、稳定性和质量的首要任务。C 和 C++中的内存安全漏洞仍然是最难解决的不正确性来源。我们投入了大量的精力和资源来检测、修复和缓解这类错误,这些努力有效地防止了大量的错误进入 Android 版本。然而,尽管有这些努力,内存安全漏洞仍然是稳定性问题的首要因素,并且一直占 Android 高严重度安全漏洞的 70%。

  13. Android 系统 Bar 沉浸式完美兼容方案:自 Android 5.0 版本,Android 带来了沉浸式系统 bar(状态栏和导航栏),Android 的视觉效果进一步提高,各大 app 厂商也在大多数场景上使用沉浸式效果。但由于 Android 碎片化比较严重,每个版本的系统 bar 效果可能会有所差异,导致开发者往往需要进行兼容适配。为了简化系统 bar 沉浸式的使用,以及统一机型、版本差异所造成的效果差异,本文将介绍系统 bar 的组成以及沉浸式适配方案。

  14. 内存优化: 纹理压缩技术:游戏开发中纹理是内存占用大户,移动设备因为内存有限,问题更加明显。据统计,淘宝互动小程序性能卡口 70% 以上都是因为内存超标,而内存超标的主要原因则是图片素材过多、过大等。

    我们知道传统的图片文件格式有 PNG 、 JPEG 等,这种类型的图片格式无法直接被 GPU 读取,需要先经过 CPU 解码后再上传到 GPU 使用,解码后的数据以 RGB(A) 形式存储,无压缩。

    而纹理压缩顾名思义是一种压缩的纹理格式,它通常会将纹理划分为固定大小的块(block)或者瓦片(tile),每个块单独进行压缩,整体显存占用更低,并且能直接被 GPU 读取和渲染(无需 CPU 解码),举例来说,一张 1024x1024 的 JPEG 图片,使用 RGBA 格式,显存占用在 4M~5.3M 左右,而如果采用 ASTC_4x4 纹理压缩格式后,理论内存占用约在 1.3M 左右,相比普通纹理,可以减少 70%+内存,具体数据见本文第三部分。

  15. BlastBufferQueue 运用场景[5]

    1. SystemUI 向系统服务提交原子操作同步请求,操作中包含对 A B 进程窗口的修改;

    2. 系统服务根据 A B 窗口的状态分别通知 A B 进程进行同步性质的内容重绘;

    3. A B 进程内容绘制完毕,通过 BBQ 机制在内容绘制完毕后接管了 BBQ 的下一帧提交,并停止 UI 线程绘制,将各自接管的事务操作反馈给系统服务;

    4. 系统服务先合入其他消费者的事务,此时的事务已包含应用内绘制数据,消费者配置更改操作。再将该事务合入到对应窗口容器的用于同步的事务中(mSyncTransaction);

    5. 系统服务遍历窗口配置更改,将 SystemUI 提交的原子操作也合入到对应窗口容器的用于同步的事务中;

    6. 系统服务通过 BLASTSyncEngine 将 A B 进程对应窗口容器的同步事务合入到 Merged 事务,Merged 事务包含了下一帧消费者的配置更改操作、A B 进程的应用内容绘制数据、SystemUI 提交的原子操作。

    7. 系统服务将 Merged 事务传递回 systemUI 进程进行统一提交。

  16. Making camera uploads for Android faster and more reliable[6]:这篇文章是关于我们在为安卓系统建立新的相机上传功能时做出的一些设计、验证和发布决定,我们在 2021 年夏天向所有用户发布了该功能。该项目成功交付,没有出现中断或重大问题;错误率下降,上传性能大大改善。如果你还没有启用相机上传功能,你应该自己试试。

  17. JsonChao 的终于懂了系列

    1. “终于懂了“ 系列:Jetpack AAC 完整解析(一)Lifecycle 完全掌握!

    2. “终于懂了“系列:Jetpack AAC 完整解析(二)LiveData 完全掌握!

    3. “终于懂了“系列:Jetpack AAC 完整解析(三)ViewModel 完全掌握!

    4. “终于懂了“系列:Jetpack AAC 完整解析(四)MVVM - Android 架构探索!

    5. “终于懂了“系列:Jetpack AAC 完整解析(五)DataBinding 重新认知!

    6. 深入探索 Android 网络优化(二、网络优化基础篇)上

    7. 深入探索 Android 网络优化(二、网络优化基础篇)下

  18. Linux tracing systems & how they fit together[7]:多年来,我一直对 Linux 追踪系统感到困惑。有 strace,有 trace,有 kprobes,有 tracepoints,有 uprobes,有 ftrace,有 perf,有 eBPF。这一切是如何结合在一起的,这一切意味着什么?

  19. Kotlin 的 by 委托[8]:Kotlin 的 by 委托

  20. Kotlin Multiplatform by Tutorials[9]:讲 Kotlin Multiplatform 的一门课

  21. C++17 常用新特性(五)---强制省略拷贝或传递未实质化的对象:本文主要包含两个方面:

    1. 从技术上的角度说,通过技术演进减少值拷贝或者临时对象传递时对象的拷贝构造;

    2. 从效果上说实际上是传递了一个没有进行实质化的对象。ps:unmaterialized object 这个具体怎么翻译大家仁者见仁。

  22. Android 快速适配 64 位架构:64 位的应用性能更好,也能运行在未来仅支持 64 位架构的设备上。目前各个应用市场也对 64 适配提出了要求,本文教大家快速适配 64 位架构

  23. 为你的 App 减少网络延迟:内容基于 Session 10239[1] 完成。网络延迟是影响 App 用户体验的一个重要因素。如果用户使用一个 App 的网络请求经常延迟比较高,对用户来说意味着糟糕的使用体验;对开发者来说,则可能意味着负反馈,甚至是用户流失。本文主要介绍了影响网络延迟的原因及如何降低网络延迟。文中涉及了很多传输层协议相关的知识,也会对相关概念进行解释。

  24. 欢迎体验 | Android 13 开发者预览版 2:上个月,我们发布了 Android 13 的首个开发者预览版。Android 13 围绕我们的核心主题打造,即隐私和安全、开发者生产力,以及支持平板电脑和大屏幕设备。今天,我们为大家带来了 Android 13 开发者预览版 2,提供了更多的新功能和变更,供您在应用中尝试。您的意见会帮助我们将 Android 打造成更适合开发者和用户的平台,欢迎大家和我们分享测试反馈!

    在今天的发布之前,Android 12L 功能更新已经于上周发布至 Android 开源项目 (AOSP) 中,这些功能更新会帮助大家充分利用超过 2.5 亿台的大屏幕 Android 设备。为了帮助大家深入了解 Android 13、平板电脑,以及我们在 Jetpack Compose 中提供的开发者生产力功能,我们准备了新一期的 #TheAndroidShow 节目,☟ 欢迎大家观看 ☟

  25. 饿了么双十一 PHA 会场实践:饿了么端 618、国庆、双 11、双 12 等大促会场基本上会标配底部导航,在之前普通 H5 容器中底部导航是前端实现,每次点击会场底部导航的 tab,都会重新启动一个活动页面覆盖在上面,即使之前打开过的 tab 也都要重新创建和加载,体验不佳,且 H5 也不能很好的结合 Native 能力做进一步的体验和性能优化。

    经过调研发现手淘 PHA 框架可解决上述痛点问题,PHA 容器底部 TabBar 为 Native 渲染,tab 点击时底部 bar 不会重建,tab 对应的 webview 在整个 PHA 容器中也可以平滑过渡、无缝切换,无需另起容器。且加载过的 tab 活动页面 Webview 会常驻内存,当再次访问时会直接切换至前台,更接近 native 体验。

    在去年 618、国庆、双 11 和双 12 大促中,结合饿了么业务特性又陆续落地了一些特色优化手段,带来了更好的性能体验和业务成果。

  26. Schedutil governor 情景分析:内核工匠在之前的几篇文章中已经详细介绍了 CPU 的调频子系统的软件框架,本文把重点放在了 schedutil governor(后文称之 sugov)的代码逻辑。通过详细的代码级别的分析,希望能够帮助读者理解 sugov 的代码精妙之处。本文主要分四个章节:第一章简单重复了 sugov 相关的软件结构和基本算法,让读者对整个 sugov 在系统所处的位置和基本的逻辑控制有所了解。第二章对 sugov 使用的数据结构给出了详细的解释。第三章对 sugov 和 cpufreq core 的基本数据流和控制流进行分析。第四章描述了 sugov 本身的调频逻辑。

  27. 一文读懂 Fragment 的方方面面:到了如今 AndroidX & Jetpack 的年代,Google 官方也终于开始重新构思 Fragment 的定位,并对 Fragment 进行了大量重构。引用官方的说法:我们希望 Fragment 成为一个真正的核心组件,它应该拥有可预测的、合理的行为,不应该出现随机错误,也不应该破坏现有的功能。我们希望挑个时间发布 Fragment 的 2.0 版,它将只包含那些新的、好用的 API。但在时机成熟之前,我们会在现有的 Fragment 中逐步加入新的并弃用旧的 API,并为旧功能提供更好的替代方案。当没人再使用已弃用的 API 时,迁移到 Fragment 2.0 就会变得很容易

    本篇文章就来介绍新时代 AndroidX Fragment 的方方方面,陆陆续续写了一万多字,有基础知识也有新知识,也许就包含了一些你还没了解过的知识点,看完之后你会发现 Fragment 如今好像真的在变得越来越好用了,希望对你有所帮助

  28. The Speed of Time[10]:How long does it take to read the time? How would you time time? These strange questions came to the fore back in 2014 when Netflix was switching services from CentOS Linux to Ubuntu, and I helped debug several weird performance issues including one I'll describe here. While you're unlikely to run into this specific issue anymore, what is interesting is this type of issue and the simple method of debugging it: a pragmatic mix of observability and experimentation tools. I've shared many posts about superpower observability tools, but often humble hacking is just as effective.

  29. Android 跨进程通信:图文详解 Binder 机制 原理[11]:本文采用 清晰的图文讲解方式,按照 大角度 -> 小角度 去分析 Binder,即:

    1. 先从 机制、模型的角度 去分析 整个 Binder 跨进程通信机制的模型

    2. 再 从源码实现角度,分析 Binder 在 Android 中的具体实现

  30. Android:JNI 与 NDK 到底是什么?[12]:

    1. 在 Android 开发中,使用 NDK 开发的需求正逐渐增大

    2. 但很多人却搞不懂 JNI 与 NDK 到底是怎么回事

    3. 今天,我将先介绍 JNI 与 NDK & 之间的区别,手把手进行 NDK 的使用教学,希望你们会喜欢

  31. Android 中的进程名和线程名[13]:古人起名颇为讲究,不单有名,还有字。文人雅士有时还会给自己取个“别号”。所谓“名为正体,字以表德,号以寓怀”,三者共同展现一个人的品格和追求。在 Android 的世界里,进程和线程的名称也多种多样,有的地方用的是“名”,用的地方用的是“字”,并不统一。所以本文的目的就是深究本质,让观众老爷们知道,拿掉这些代号后的主体到底是谁。先来浅问几个问题:

    研究事物时,我们要用历史变迁的角度来思考。因此,想要理解 Android,必先理解 Linux。

    1. Android 应用的主线程在 trace 文件中的名称是什么?在 tombstone 文件中的名称又是什么?

    2. Java 层创建的新线程默认名称是什么?Native 层创建的新线程默认名称又是什么?

    3. Trace 文件最顶部的"Cmd line"本意为何?为什么它会和应用的包名一致?

    4. Ps -A(或 ps -e)显示的结果里,CMD 那一列显示的是什么?为何有的名称用"[]"括起来了?

  32. 干货分享丨 HDR 技术产品实践与探索:本文整理自 OPPO HDR 研发负责人熊磊,在 RTE2021 实时互联网大会上的演讲。他通过介绍 HDR 视频标准与生态、关键技术、发展方向三部分,分享了在移动端 HDR 视频的落地情况以及技术细节。

  33. sysctl 参数防篡改 - 基于 ebpf 的实现 [一]:如果内核配置选项中使能了 "CONFIG_BPF_KPROBE_OVERRIDE"(默认通常没有打开),那么 ebpf 也是可以用来修改一些函数的返回值的。之所以说是“一些函数”,是因为出于安全的考虑,其目前仅限于作用在允许 fault injection 的函数(即设置了 "ALLOW_ERROR_INJECTION" 特殊 section 的函数),这就造成了其使用范围非常受限。

  34. Flutter App Architecture with Riverpod: An Introduction[14]:在构建复杂的应用程序时,选择正确的应用程序架构是至关重要的,因为它可以使你的代码结构化,并在你的代码库增长时提供支持。好的架构应该能帮助你处理复杂的问题,而不至于妨碍到你。但要做好它并不容易。

    在实践中,事情可能是相当微妙的,需要一些实践和经验来获得正确的平衡。

    1. 缺少架构会使你的代码整体上缺乏组织性

    2. 过度使用架构会导致过度的工程化,使得即使是简单的修改也很难进行。

Part2经验分享 && 推荐阅读

过去一周个人阅读和收藏的非技术文章精选,扩展 Android 之外的知识和视野,不要给自己设限

  1. 血钱:下沉市场医疗电商乱象调查:自 2021 年下旬以来,朱思码记通过伪装成买家与家属的形式暗访,在多家面向下沉市场的电商平台上发现了一条涉嫌欺诈孕期产妇、准妈妈和准爸爸们的地下产业链,而上述一幕就发生于当前中国用户规模最大,对下沉市场影响力最深远的电商平台——拼多多。

  2. 什么是好的技术氛围?:无论哪个行业无论工作多久,每个人都希望自己所处的环境有一个好的氛围,工程师们会希望自己公司有一个好的技术氛围。什么才是好的技术氛围呢?好的技术氛围有什么现象?打造好的技术氛围,又需要做什么工作呢?

    今天我们邀请了 2 名大淘宝技术的工程师,结合他们真实的学习工作经历,给大家分享一些 他们认为好的技术氛围。

  3. 吹捧「远程办公」的硅谷巨头,背地里却在偷偷买楼:新冠疫情让居家和远程办公成为主流办公方式,包括 Zoom、Teams、Slack 等在内的办公 SaaS 软件流量都出现爆发式增长。微软、谷歌、Facebook 等大公司不仅积极鼓吹远程办公的好处,还积极下场大力投入布局,俨然一副极度看好的态势。

    不过,积极推广线上办公的另一面,「鸡贼」的硅谷大佬们在新冠期间并没有停下买地租楼扩充新办公室的脚步:谷歌、亚马逊花了数十亿美金,Facebook 则将办公空间扩充了几十万平方米。

  4. 请相信你的感觉和判断,给自己一条活路[15]:请大家相信自己的感觉和判断,给自己一条活路,让自己活到 2050 年以后,这才是最重要的!

  5. (某码农的不科学)投机市场观察录[16]:[2022-3-15][市场观察] 中概互联的价值重估

  6. 开源世界里的法律与政治[18]:写这篇文章,其实有很多原因。因为最近发生的俄罗斯与乌克兰的战争,各种影响蔓延到了 IT 产业、互联网、社交媒体,当然也“烧”到了开源世界。本文阐述三个观点:法律有国界政治有立场开源无歧视

  7. 选择的维度[19]:工作这些年之后,我将一份工作中满意度的指标大体划分到三个维度里面:钱、事情和人。一份工作,如果有两个维度都能较好的满足自己标准的,就算是一份不错的工作了;反之,只有一个维度满意,这时毫不犹豫就应该换一份工作;三个维度都能很好的工作,可遇而不可求。

  8. 这是可以做一辈子的事么[20]:最近接触一些同辈朋友,发现大家对于职业流动的观点和选择更加开放多元。频繁跳槽的、大厂出来创业的、打工裸辞过自由人生活的,都越来越多。

    循规蹈矩的传统职业路径已被阻隔,前一代人的成功经验在新一代人面临的困境中已经过时失效。宏观环境的不确定性,加剧了职业生涯的焦虑,但同时也造就了更多人生选择的可能性。

    然而,职业、工作和人生三重维度的选择权衡,始终盘旋在每个人心中,成为绕不开、躲不过、必须要去纠结和掂量的话题。一代人有一代人的困惑,而一代人在不同代际也有不同的困惑。

    这可能需要我们用很长的时间去探索去思考,甚至有可能最后也无法找到一个明确的答案,就像这是可以做一辈子的事么 这篇文章末尾菜头叔所写的:「事情大概就是这样」——我们将不得不和「内里的一团混沌」长期相伴相存。

  9. 我如何在居家办公中重建生活秩序| hayami’s blog:这两年我学会的一件事情,就是在混沌的、不确定的大环境下,一次次把生活化整为零推翻重建,收拢自己精神能量的给予范围,过上一些具体而微的生活。对一个基本在公司不 social 的人来说,WFH 是一件非常快乐的事情,但它最大的问题就是模糊了生活和办公的界限。我在尝试解决其中的一些问题,带来了不错的收获;也有一些问题有待实践,需要写下来理清思路。

    这篇 blog 就聊聊我是怎么 WFH 的,也当作给自己重建生活秩序的一次尝试。

  10. 我是这么用这些 高效写作、排版工具:不同的工具,在不同的场景下都有各自的作用,上面只是列出了我对这些工具的使用,而今天这篇文章主要介绍 Typora 在 WX 编辑器排版的问题。

  11. 写给 20 岁左右的读者朋友:新时代,很多东西和我们当年不一样了,时代正在激变,一切都在改变,我已经没办法建议说,哪个行业更有机会,哪个产业还在崛起,这需要你们自己去发现,自己去总结。但前提是,你们要勇于去探索,最后,要强烈的提醒一点,长辈的很多经验已经不适用了,务必牢记这一点。

  12. 创作者手记 Vol.004:把自己作为优质信息的桥梁:稀缺性并不是关键,关键是当你在消化内容并精挑细选的过程中,也能促进自己对内容的消化和吸收更进一步,强化理解,让创作小报童的过程中不是消耗,而是滋养。

  13. Re:Build 产品重构计划 #4:独立开发不要犯的 10 个错误:之前在 V2ex 上看到一个「8 万变 80 万」的帖子,描述了作者作为独立开发者,希望借助独立开发获得自由,但最终负债累累的故事。我将作者的犯下的错,进行了梳理,得到了以下的结果,将其分享给你,帮助你来梳理自己在做的事情。

  14. 新的阶段[21]:这个博客《20xx 年的一些记录》年终总结系列从 2017 年写到 2020 年,2021 年的不准备专门写了。现在三月份当然也可以做总结,「年度」只是人为划定的区间,时间节点并不真正影响客观世界的运行,我下午打开手机把去年到今天的所有日历事件都看了一遍,的确没有太多值得写的,所以在这篇阶段性总结里捎带聊一下。主要还是记录我当前的状态和想法。

  15. 52-design-principles[22]:设计的探索从不停步,好的产品有逻辑可循。我们争先恐后地寻找设计成功背后的原因。做尽可能好的设计决定 —— 是这个项目诞生的意义。

  16. 产品沉思录精选:如何面对信息过载与分配时间的三种方式:我们消耗的信息与我们摄入的食物一样重要。它影响着我们的思维,行为,以及我们如何理解自己在这个世界上的位置。以及我们如何理解他人

  17. Why Facts Don’t Change Our Minds[23]: 经济学家加尔布雷斯(J.K. Galbraith)曾经写道:"面对改变自己的想法和证明没有必要这样做之间的选择,几乎每个人都会忙于证明。"

    列夫-托尔斯泰甚至更大胆。"如果最迟钝的人还没有形成任何想法,那么最困难的课题可以向他解释;但如果最聪明的人坚定地认为他已经毫无疑义地知道摆在他面前的东西,那么最简单的事情就不能让他明白。"

    这里发生了什么?为什么事实不会改变我们的想法?而且为什么有人会继续相信一个错误或不准确的想法呢?这种行为对我们有什么好处?

  18. 关于智能驾驶域控制器的一些观察:中国车企的电子电气架构正逐渐从分布式架构向域集中式过渡,部分国内主流车企已在 2021 年实现了域集中式架构平台的量产落地。智能驾驶域控制器作为智能网联汽车的“中央大脑”,已经是各家主机厂关注的重点领域。

  19. 知识是最精纯的愉悦 | 2022 年 3 月书单:1 月的时候不知道为什么总是很低气压,就决定看书。主要平台是微信读书。什么干涸饥渴空虚,狂读就完了……书单量大慎入。不是所有都读完了,也有放弃的,每本书我都会写批注!欢迎交流。

  20. 把「robust」翻译为「鲁棒」最早起源于哪里?- 知乎[26]:写作本篇的缘由是昨日我生活中的一个小插曲。在翻译某学术文献时,由于对 robustness 一词的翻译存疑,我特地查阅了相关术语词典,无意中发现了“鲁棒性”这个说法。由于“robust”的中文翻译本身是较为明确的,所以这个既不算贴近该词发音,又容易让新时代网络青年们相视一笑的词,引起了我的兴趣。

  21. 技术上的思考和总结:毕业之到现在一直做客户端相关的技术和管理工作,从 Android 到大前端,从 UI,业务组件,到音视频,架构,性能,中台,小程序等,基本上在客户端这部分能做的都多少接触了一些。在工作上经历了腾讯,阿里和 OPPO,最多的时候带了 40 人的开发团队,现在在技术上也有了一些自己的思考和总结。

Part3开发 Weekly

  1. Android Weekly-510[27]

  2. Kotlin Weekly #294[28]

  3. onCreate Digest - Issue #100[29]

  4. NEWSLETTER #97[30]

  5. 软件测试周刊(第 63 期):凡是持久的,必是温和的与可持续的

Part4书籍推荐

奔跑吧 Linux 内核,出到第二版了

  1. 奔跑吧 Linux 内核(第 2 版)卷 1:基础架构(异步图书出品)[31]

  2. 奔跑吧 Linux 内核(第 2 版)卷 2:调试与案例分析(异步图书出品)[32]

Part5定时打鸡血

罗素:"这个世界的问题,在于聪明人充满疑惑,而傻子们坚信不疑。

Part6NewsLetter

由于微信外链限制,很多文章链接都无法直接访问,推荐大家订阅 NewsLetter 来获得更好的阅读体验,或者访问网页端或者知乎专栏

  1. 订阅地址:https://androidweekly.zhubai.love/

  2. 本文 NewsLetter 地址:https://androidweekly.zhubai.love/posts/2117487409930309632

  3. 本文知乎地址:https://zhuanlan.zhihu.com/p/484466230

参考资料

[1]

1 min guide to learn android development best practices in 2022: https://blog.canopas.com/android-development-best-practices-2022-203682a440f5

[2]

Implementing Android 12 Material You's Monet theme engine in Flutter: https://dev.to/vinaytiparadi/implementing-android-12-material-yous-monet-theme-engine-in-flutter-20a8

[3]

vandadnp / flutter-tips-and-tricks Public: https://github.com/vandadnp/flutter-tips-and-tricks

[4]

Rust in the Android platform: https://security.googleblog.com/2021/04/rust-in-android-platform.html

[5]

BlastBufferQueue 运用场景: https://zoyi14.smartapps.cn/pages/note/index?slug=384a5cd2e304

[6]

Making camera uploads for Android faster and more reliable: https://dropbox.tech/mobile/making-camera-uploads-for-android-faster-and-more-reliable?s=09

[7]

Linux tracing systems & how they fit together: https://jvns.ca/blog/2017/07/05/linux-tracing-systems/#ftrace

[8]

Kotlin 的 by 委托: https://www.jianshu.com/p/1aa119509fb2

[9]

Kotlin Multiplatform by Tutorials: https://www.raywenderlich.com/books/kotlin-multiplatform-by-tutorials?s=09

[10]

The Speed of Time: https://www.brendangregg.com/blog/2021-09-26/the-speed-of-time.html

[11]

Android 跨进程通信:图文详解 Binder 机制 原理: https://carsonho.blog.csdn.net/article/details/73560642

[12]

Android:JNI 与 NDK 到底是什么?: https://carsonho.blog.csdn.net/article/details/73250163

[13]

Android 中的进程名和线程名: https://juejin.cn/post/7076326625436467214

[14]

Flutter App Architecture with Riverpod: An Introduction: https://codewithandrea.com/articles/flutter-app-architecture-riverpod-introduction/

[15]

请相信你的感觉和判断,给自己一条活路: https://telegra.ph/%E8%AF%B7%E7%9B%B8%E4%BF%A1%E4%BD%A0%E7%9A%84%E6%84%9F%E8%A7%89%E5%92%8C%E5%88%A4%E6%96%AD%E7%BB%99%E8%87%AA%E5%B7%B1%E4%B8%80%E6%9D%A1%E6%B4%BB%E8%B7%AF-03-12

[16]

(某码农的不科学)投机市场观察录: https://github.com/acbocai/speculative-market-record

[19]

选择的维度: https://www.codedump.info/post/20210803-choice-dimension/

[20]

这是可以做一辈子的事么: https://juicing.today/juice/20220315

[21]

新的阶段: http://www.gexiao.me/2022/03/17/new-stage/?s=09

[22]

52-design-principles: https://rpdc.xiaohongshu.com/52-design-principles/about

[23]

Why Facts Don’t Change Our Minds: https://jamesclear.com/why-facts-dont-change-minds

[26]

把「robust」翻译为「鲁棒」最早起源于哪里?- 知乎: https://www.zhihu.com/question/20229551/answer/558142823

[27]

Android Weekly-510: https://androidweekly.net/issues/issue-510

[28]

Kotlin Weekly #294: https://mailchi.mp/kotlinweekly/kotlin-weekly-294

[29]

onCreate Digest - Issue #100: https://www.oncreatedigest.com/issues/oncreate-digest-issue-100-1078797

[30]

NEWSLETTER #97: https://dormoshe.io/newsletters/ag/android/97

[31]

奔跑吧 Linux 内核(第 2 版)卷 1:基础架构(异步图书出品): https://item.jd.com/13051268.html

[32]

奔跑吧 Linux 内核(第 2 版)卷 2:调试与案例分析(异步图书出品): https://item.jd.com/13143768.html

Android Weekly #33 :这个世界的问题,在于聪明人充满疑惑,而傻子们坚信不疑相关推荐

  1. Android Weekly Notes Issue #226

    Android Weekly Issue #226 October 9th, 2016 Android Weekly Issue #226 本期内容包括: 用Firebase做A/B Test; 用R ...

  2. Android Weekly Notes Issue #220

    Android Weekly Issue #220 August 28th, 2016 Android Weekly Issue #220 ARTICLES & TUTORIALS Manag ...

  3. Android Weekly Notes Issue #225

    Android Weekly Issue #225 October 2nd, 2016 Android Weekly Issue #225 本期内容包括: Android 7.0的Quick Sett ...

  4. Android Weekly Notes Issue #230

    Android Weekly Notes Issue #230 November 6th, 2016 Android Weekly Issue #230. Android Weekly笔记, 本期内容 ...

  5. Android Weekly Notes Issue #218

    Android Weekly Issue #218 August 14th, 2016 http://androidweekly.net/issues/issue-218 ARTICLES & ...

  6. Android L 值不值得刷?十个问题解疑惑

    笔者今天把大家对Android L预览版的问题进行一个汇总,并挑选十个最受用户关注的问题进行一一回答.相信当你看完这十个问题后,Android L预览版到底值不值得刷?你心中一定会有自己的答案. (一 ...

  7. Android Weekly #29

    技术文章 过去一周 Android 相关的技术文章精选 实战 | 在应用中使用 Compose Material 3 Material You 是下一代 Material Design 的发展方向,也 ...

  8. Android Weekly #38 :Android 13 正式发布

    Tips : 由于微信公众号外链限制,大部分文章链接都无法直接访问,推荐大家订阅 NewsLetter 来获得更好的阅读体验,或者访问网页端或者知乎专栏 (点击原文即可) 技术文章 过去一周 Andr ...

  9. Android Weekly #31:你最能影响「他者」的,是你正在工作的状态

    Part1技术文章 过去一周 Android 相关的技术文章精选,以及过去一周发现的经典文章 Android 编译优化系列-kapt 篇:kapt 可以理解为就是在 kotlin 开发场景下进行注解处 ...

  10. Android Weekly #37 :寻找知识的能力是一个非常重要的能力,如果找不到,你就只能等着别人来投喂...

    Tips : 由于微信外链限制,很多文章链接都无法直接访问,推荐大家订阅 NewsLetter 来获得更好的阅读体验,或者访问网页端或者知乎专栏 (点击原文即可) 技术文章 过去一周 Android ...

最新文章

  1. ★移动机器人 激光 构建地图 定位
  2. 解题报告:luogu P2423 [HEOI2012]朋友圈【最大团转最大点独立集(匈牙利算法+时间戳优化)】
  3. SparkStreaming读取Socket数据
  4. Android之Activity的四种启动模式
  5. dockerfile的详细介绍
  6. POJ - 3842 An Industrial Spy dfs(水)
  7. 54失败是成功之母二
  8. 装饰者模式(Decorator)
  9. ArcSDE工作机制
  10. python创建目录保存文件
  11. 【Spring 高级注解】@Configuration、@Bean、@ComponentScan
  12. Second Highest Salary --leetCode
  13. 2017四川省赛E题( Longest Increasing Subsequence)
  14. plsql dev中Dynamic Performance Tables not accessible分析解决(转载)
  15. LOJ#2343. 「JOI 2016 Final」集邮比赛 2
  16. linux 精简桌面,Linux桌面环境之轻型简易妙招(摘自toy)
  17. es自建搜索词库_ES——中文分词以及词库扩展
  18. 读书笔记:软件工程(1) - 软件工程概述(1)
  19. 地址总线是单向还是双向_双向可控硅和单向可控硅的区别
  20. cracklib/pw_dict.pwd

热门文章

  1. 3D建模和3D渲染吃什么硬件?专业图形显卡和游戏显卡区别
  2. 如何使用Clonezilla克隆Windows硬盘
  3. mysql用户域账户登录_使用本地系统帐户和域用户帐户两者区别(microsoft SQLServer2000...
  4. Mybatis-查询处理一对一和一对多
  5. 电脑自动捆绑软件,怎么办?
  6. 关于百度云订阅无法正常查看订阅者分享的解决办法
  7. java 公共方法是什么意思_在java中公共/私有/其他方法的含义是什么意...
  8. 最新版gg服务器框架安装器,GG服务框架安装器
  9. python查询12306余票_python命令行查询12306火车票
  10. python——遥感影像分块