Abel's Blog

当你停止创造,你的才能就不再重要,剩下的只有品味。
品味会排斥其他人,让你变得更狭隘。
所以,要创造。

Flutter for iOS 设计语言:Cupertino 中文翻译

抹平道路的崎岖

为什么要翻译 闲下来就要找事做,忙起来了就有意思了。 Cupertino 是 iOS 的官方设计语言。Flutter 对其进行了高保真的还原,以谋求与原生控件一致的效果。 本文对 Cupertino (iOS-style) widgets 下的内容进行非逐字对应的简要翻译,意图为清晰而准确的描述每个 widget 的用法。所有示例均带 demo code,效果与截图一致。欢迎交流和指正...

啊哈,本命年。2018 小结

感谢不尽的人

随笔 转眼 2018 接近尾声,写写流水账,各位看官们也就看看图个乐~ 职业发展 五月,跳槽了。在老东家呆了 2 年有余,要特别感谢众多小伙伴。 我还记得,五月那个夜黑风高的晚上,八点有余。我用屁股把凳子挪到老陈(leader)边上:「嘿嘿,到外边聊聊天呗」。 那晚,凉嗖嗖的,还有点毛毛细雨。我们绕着羊创园区逛了两圈。那时候,YY 已经搬走了,酷狗灯火通明,还没下班。 没有非...

深入 git 必看:git 是如何被创造的?讲述 git 的诞生史、核心思想及其父:Linus Torvalds

可靠,高效,分布式

原创文章,首发自简书。前往查看 git 是世界上最先进的分布式版本控制系统,没有之一。 前言 本文简要阐述了 git 的诞生历程,以及其作者 Linus Torvalds(林纳斯·托瓦兹,同时也是 Linux 之父)对 git 的思考。对开发者而言,了解 git 产生的背景和设计理念,有助于更好地理解和使用 git;对管理者而言,则能更好地对企业项目开展有效的管理。 本文...

一番思考:一个Bug修了一整周

大多数时候,错在于你

原创文章,首发自简书。前往查看 0x00 背景 2017,开工大吉。 春节过后,小组将许多日积月累问题的解决进度提上日程,这使得年后工作显得更为繁重。事实上,许多小问题可能经过日长时间的沉淀,演化成更为复杂的问题。产品业务极速膨胀,开发团队如何把控代码质量则显得极为重要。 今天我要回味一个bug。今天不关心这个bug是个什么问题,这不重要。修复这个bug的代码不超过10行,但...

Binder:为什么要通过 onTransact() 调用目标方法

探索巨人的脉络

原创文章,首发自简书。前往查看 0x00 背景 最近被提出一串问题:为什么android.os.Binder要提供onTransact()方法给子类重写。为什么要通过Client:invokeMethod -> onTransact() -> Service:targetMethod这一曲折过程来调用一个远程方法,为什么不能直接指定方法名称来调用。 这些问题阐述了同...

Android Bitmap 转换 WebP 图片导致损坏的分析及解决方案

要善于观察

原创文章,首发自简书。前往查看 0x00 背景 作为移动领域所力推的图片格式,WebP图片在商业领域证明了其应有的价值。基于其他格式的横向对比,其在压缩性能表现,及还原度极为优秀,节省大量的带宽开销。基于可观的效益比,团队早前已开始磋商将当前图片资源迁移至.webp资源。 然而对于Android而言,加载.webp图片所消耗的时间比.jpg及.png要慢数倍。对于这点而言是无法...

开发者大杀器:Battery Historian,刨根问底,揪出 Android App 耗电的元凶代码

电量关乎力量

原创文章,首发自简书。前往查看 0x00 这是啥? 这是一篇讲述应用耗电的文章,围绕 Android 电量采集机制及第二代 Battery Historian 分析工具讲述。文从数据采集、导出、环境搭建、解读报告的角度出发,从细节讲解整个流程。和大谈概念的文章不同,这里将进行实际操作及分析。 写作动机来源于最近的工作需求,但分析过程中发现网上资料较为匮乏。在此执笔写作,以便日后...