「内存抖动」?别再吓唬面试者们了行吗

看起来很酷的词总是容易吸引眼球,比如「双亲委托」,比如「责任链」,比如——「内存抖动」。吸引眼球就意味着会有更多点击,而点击量是内容创作者最爱的东西,所以这些名字很酷的词就很自然地会受到各种技术文章的偏爱,因为你写这些文章可以得到更多的流量,这是无可厚非的。但有些作者对于流量的追求过于偏执,什么东西都喜欢过分地吹一下。 大家作为读者,看文章的时候要有辨别力,不要被这些流量词带偏,更不要被某些流量贩子们骗得去加到自己的面试题里来考验你的面试者是否读过某篇文章,这是没有价值的。…

阅读全文

【HenCoder Plus】第四期终于来了

HenCoder Plus Android 瓶颈突破系列课的第四期,码上就要开课啦! 这是我第一次用视频打广告,打的还是自己的广告,我觉得我快上瘾了。大家不管报名不报名,快帮我在看和转发一下,还有去 B 站帮我点赞啊! 如果你看不到上面的哔哩哔哩视频,可以点击 这里 去 YouTube 看。 大家中秋节快乐!…

阅读全文

kaixue.io: Kotlin 和 Jetpack 的上手指南

如果你看不到上面的视频,可以点击 这里 去腾讯视频或者点击 这里 去 YouTube 看原视频。 大家好,我是扔物线。 距离上一次 HenCoder 视频到现在,已经又是三个月的时间了。不过,这一次我不是要推出新一期的 HenCoder 视频或者文章,而是要向大家推荐一个更紧急的新项目:kaixue.io。 这一年多来我一直在做 HenCoder,专注的是高级 Android 工程师的基础部分的技术,比如大家看到最多的是自定义 View,另外前段时间开始了 HTTP 方面的。但最近我要暂时倾斜一下重心,先重新把内容输出转到新技术上一段时间,具体来说主要是 Kotlin 和 Jetpack。 另外呢为了让这件事更快更高效,我喊了一些高手来和我一起写,还建立了一个专门的网站。现在我们的网站已经正式上线,就是前面我提到的:kaixue.io,名字叫「码上开学」,代码的码。我们要做的,是一个 Kotlin…

阅读全文

HTTPS 为什么是安全的

HTTPS 为什么是安全的 好久没更新了,这期说一下 HTTPS 的「安全」。 从这期开始,HenCoder 会开始讲自定义 View 以外的内容。目标依然是瞄准当代中国大多数工程师的弱点:瓶颈基础。这期是 HTTP 方面的内容,以后也许继续是网络,也有可能会和其他内容穿插着来。总之,目标不变:瞄准基础但避免晦涩,期望能提高大多数人的天花板。 现在越来越多的网站和服务开始启用 HTTPS,我们作为软件工程师也就需要跟进,把产品里面的 HTTP 请求改成 HTTPS 的。 如果只是做这么一个切换,一般只需要把 url 里的 http 改成 https 就行了,其他的事情由系统的或者网络请求库的 API 来帮我们自动搞定。但总有些例外情况——例如证书自签名——会需要我们对 HTTPS 的原理有更深入的了解,至少知道它所谓的「安全」到底是为什么。…

阅读全文

HenCoder 自定义 View3-1 触摸反馈,以及 HenCoder Plus

自定义 View3-1 触摸反馈,以及 HenCoder Plus 休息了几个月,HenCoder 又回来了。 这期的内容是之前说过的,自定义 View 的最后一部分:触摸反馈。触摸反馈的概念简单,但是内部逻辑比较复杂,往往把开发者难倒、让人总也学不会的也是因为逻辑太多绕不过来,所以我这次又做了一个长长的视频来讲解原理,把最本质的东西拆解开来讲,希望能让你比较舒服地吸收。视频的制作花了 5 天时间,一共 12 分钟多,全部是讲的触摸反馈的一些最核心的逻辑和原理。 细节上反而没有讲太多,因为讲这方面细节的文章,网上已经一大堆了,而且不少都写得很好。 闲话说完,放视频: 如果在页面中看不到视频,可以点 这里 去看原视频。 总结: 自定义触摸反馈的关键: 重写 onTouchEvent(),在里面写上你的触摸反馈算法,并返回 true(关键是 ACTION_DOWN 事件时返回 true)…

阅读全文

HenCoder Android 自定义 View 2-3 定制 Layout 的内部布局

自定义 View 2-3 定制 Layout 的内部布局 这期是 HenCoder 布局部分的最后一期:重写 onMeasure() 和 onLayout() 来定制 Layout 的内部布局。 简介 这期虽然距离上期的时间比较久,但主要是我的个人原因,而不是因为这期的内容难。这期的内容还是比较简单的,主要是一些概念和原理上的东西,实操方面非常容易,所以和上期一样,主要把视频看看就差不多啦: 如果看不到视频,可以点 这里 直接去 B 站看;如果你在海外,可以点 这里 去 YouTube 上看。 总结 这期的文章依然是只有总结。但这次主要是因为我最近实在太多事情了…… 定制 Layout 内部布局的方式 重写 onMeasure() 来计算内部布局 重写 onLayout() 来摆放子 View…

阅读全文

HenCoder Android 自定义 View 2-2 全新定义 View 的尺寸

View 自定义 View 2-2 全新定义 View 的尺寸 这期是 HenCoder 布局部分的第二期:重写 onMeasure() 来全新定制自定义 View 的尺寸。 简介 这期虽然距离上期的时间比较久,但主要是我的个人原因,而不是因为这期的内容难。这期的内容还是比较简单的,主要是一些概念和原理上的东西,实操方面非常容易,所以和上期一样,主要把视频看看就差不多啦: 在页面里看不到视频的,可以点击 这里 去 B 站看;在海外看得卡的,可以点击 这里 去 YouTube 看。 总结 和上期一样,这期同样是视频之后就直接是总结。 因为关键点全都在视频里讲清楚了,所以这里只总结一下视频中的关键点: 全新定制尺寸和修改尺寸的最重要区别 需要在计算的同时,保证计算结果满足父 View 给出的的尺寸限制 父 View 的尺寸限制 由来:…

阅读全文

HenCoder Android 自定义 View 2-1 布局基础

自定义 View 2-1 布局基础 HenCoder 的第二季:自定义 View 第二部分——布局过程的自定义,从这期正式开始了。好像有点小激动。 废话少说,直入正题。 简介 之前我说过,自定义 View 最关键的有三个点:绘制、布局和触摸反馈。上一季讲过的绘制,内容虽然多(好像讲了 8 期?),但难度上其实是最简单的。而布局就和它相反,布局过程的技术知识,内容比较少(应该 3 期就能讲完),但你先要理解它的内部工作原理才能正确理解它的使用,而它的工作原理却是有点绕的。所以如果你跟着 HenCoder 学习布局过程的自定义,大致会是这样一种体验:看完视频或者读完文章,感觉吸收了一大波知识,信息量好大难以吞咽的样子,但当你真的把它们吞咽下去,然后下载了我的练习项目去做练习的时候,却又发现:卧槽,就这么点东西?布局过程的自定义竟然这么简单? 会者不难这个词在很多地方都讲得通,但在布局过程的自定义上,…

阅读全文

关注我就能达到大师级水平,这话我终于敢说了

关注我就能达到大师级水平,这话我终于敢说了 这句话我真的憋了好久。Android 工程师只要关注我,我就能让你达到大师级水平,不是面试时的吹牛逼水平,不是自我欺骗的了解皮毛的水平,是真正的开发实力。以前我有这个自信,没这个证据。但现在,证据我也有了。 关注我的人都知道,我这三个多月来一直在网上分享关于 Android 自定义绘制的技术,并且在一周多前举办了一场线上的「仿写酷应用」活动,让我的粉丝仿写即刻、薄荷健康、小米运动、Flipboard 这四个软件中的几个经典效果,来自我验证一下这三个月来的学习成果。 简单地说,这事儿很成功(脸红)。 经过一周的投稿时间,共收到 97 份来自关注者的投稿(真的很多,出乎意料),而且做得都很棒。在四位原开发者的艰难筛选下,每个效果选出了一位优胜者。下面就是这四位优胜者的作品以及来自各位原开发者对他们的点评。 仿写作品 仿写一:即刻 二话不说,先看结果。 原效果: 仿写效果: 仿得很细致有没有。而且,这个仿写效果看似简单,其实是假象。…

阅读全文

HenCoder「仿写酷界面」活动——征稿

HenCoder「仿写酷界面」活动——征稿 HenCoder 的自定义 View 部分第一季——绘制——的技术讲解部分已经结束。在下一季——布局——开始之前,绘制部分还有最后一个环节,那就是在上个月我提到过的:「仿写酷界面」活动。 这次活动的目的很简单: 很多人跟着 HenCoder 学了三个月了,只觉得学了一身好功夫,却无从施展和印证。其实你学到的这些东西慢慢都会体现出它们的价值的,不过如果你比较心急,没关系,今天的仿写就是给你们准备的,你做完了今天的这几个仿写就会惊喜地发现「原来自己已经真的这么牛逼了」。 除了让你们自我证明,我也想为自己证明一下。证明什么呢? 在现在这个连 github 都会有人刷 stars 的急功近利的时代,我相信很多人在第一眼看到 HenCoder 的时候,也会习惯性地以为它只不过是一个吹嘘大于干货的没价值的博客 / 专栏 / 公众号。那么通过这次的活动我就要让人们看到,HenCoder 的读者们在业余时间里跟着我学习了短短三个月后,就能在毫无指导的情况下做出这么炫酷的效果。我要在活动结束后让大家看到,在很多人都忙于刷自己的社交声望、刷点赞数的时候,…

阅读全文

HenCoder Android 自定义 View 1-8 硬件加速

自定义 View 1-8 硬件加速 硬件加速这个词每当被提及,很多人都会感兴趣。这个词给大部分人的概念大致有两个:快速、不稳定。对很多人来说,硬件加速似乎是一个只可远观而不可亵玩的高端科技:是,我听说它很牛逼,但我不敢「乱」用,因为我怕 hold 不住。 今天我试着就把硬件加速的外衣脱掉(并没有),聊一聊它的原理和应用: 硬件加速的本质和原理; 硬件加速在 Android 中的应用; 硬件加速在 Android 中的限制。 本篇是 「HenCoder Android 开发进阶」自定义 View 部分的最后一篇:硬件加速。 如果你没听说过 HenCoder,也可以看看这个: HenCoder:给高级 Android 工程师的进阶手册 概念 在正式开始之前需要说明一下,作为绘制部分的最后一期,本期内容只是为了内容的完整性做一个补充,因为之前好几期的内容里都有涉及硬件加速的技术点,而一些读者因为不了解硬件加速而产生了一些疑问。…

阅读全文

HenCoder Android 自定义 View 1-7:属性动画 Property Animation(进阶篇)

自定义 View 1-7:属性动画 Property Animation(进阶篇) 这期是 HenCoder 自定义绘制的第 1-7 期:属性动画(进阶篇) 属性动画的上手篇在这里: HenCoder Android 开发进阶:自定义 View 1-6 属性动画(上手篇) 如果你没听说过 HenCoder,可以先看看这个: HenCoder:给高级 Android 工程师的进阶手册 简介 上期的内容,对于大多数简单的属性动画场景已经够用了。这期的内容主要针对两个方面: 针对特殊类型的属性来做属性动画; 针对复杂的属性关系来做属性动画。 TypeEvaluator 关于 ObjectAnimator,上期讲到可以用 ofInt() 来做整数的属性动画和用 ofFloat() 来做小数的属性动画。这两种属性类型是属性动画最常用的两种,不过在实际的开发中,可以做属性动画的类型还是有其他的一些类型。当需要对其他类型来做属性动画的时候,就需要用到 TypeEvaluator…

阅读全文

HenCoder Android 自定义 View 1-6:属性动画 Property Animation(上手篇)

自定义 View 1-6:属性动画 Property Animation(上手篇) 这期是 HenCoder 自定义绘制的第 1-6 期:属性动画 Property Animation(上手篇) 如果你没听说过 HenCoder,可以先看看这个: HenCoder:给高级 Android 工程师的进阶手册 简介 前几期发布后,经常在回复里看到有人问我什么时候讲动画。本来我是不打算讲动画的,因为动画其实不算是自定义 View 的内容。但后来考虑了一下,动画在自定义 View 的开发中也起着很重要的作用,有的时候你对动画的了解不够,就难以实现一些自定义 View 的效果。 于是决定:加两期,讲动画! 不过并不是所有的动画都讲,我要讲的是属性动画。 Android 里动画是有一些分类的:动画可以分为两类:Animation 和 Transition;其中…

阅读全文

关于 HenCoder

关于 HenCoder 先寒暄一下:大家好,今天没货。对,宝宝又拖更了。 然后,说点一直想说但没说的,一些「关于」。 关于 HenCoder 的定位 很多人知道,HenCoder 的定位是「高级 Android 工程师的进阶手册」: 这里有三个关键词:高级、进阶、手册。 高级: 定位在高级工程师,是因为我认为现在国内 Android 开发最严重的瓶颈在于高级工程师们的水平普遍遇到了瓶颈。几乎每个小型或微型公司的 Android 团队,都是由一个大哥负责架构搭建、任务分配、主编码以及难点的编码,或者干脆就是整个公司的 Android 只有一个人负责。这些或是带头大哥或是光杆司令的 Android 工程师,水平一般都是不错的,但很多人却也遇到了技术瓶颈,在一个还有一定上升空间的位置就有点摸到了天花板的感觉。而且,这还不是个例,而是普遍现象。这就导致,除了腾讯阿里美团滴滴这些高手云集的大公司,国内的很多公司的…

阅读全文

HenCoder Android 开发进阶:自定义 View 1-5 绘制顺序

自定义 View 1-5 绘制顺序 这期是 HenCoder 自定义绘制的第 1-5 期:绘制顺序 之前的内容在这里: HenCoder Android 开发进阶 自定义 View 1-1 绘制基础 HenCoder Android 开发进阶 自定义 View 1-2 Paint 详解 HenCoder Android 开发进阶 自定义 View 1-3 文字的绘制 HenCoder Android 开发进阶 自定义 View 1-4 Canvas 对绘制的辅助 如果你没听说过 HenCoder,可以先看看这个: HenCoder:给高级 Android 工程师的进阶手册 简介 前面几期讲的是「…

阅读全文

HenCoder Android 开发进阶:自定义 View 1-4 Canvas 对绘制的辅助 clipXXX() 和 Matrix

自定义 View 1-4 Canvas 对绘制的辅助 clipXXX() 和 Matrix 这期是 HenCoder 自定义绘制的第 1-4 期:Canvas 对绘制的辅助——范围裁切和几何变换。 之前的内容在这里: HenCoder Android 开发进阶 自定义 View 1-1 绘制基础 HenCoder Android 开发进阶 自定义 View 1-2 Paint 详解 HenCoder Android 开发进阶 自定义 View 1-3 文字的绘制 如果你没听说过 HenCoder,可以先看看这个: HenCoder:给高级 Android 工程师的进阶手册 简介 一图胜千言,一视频胜千图,走你:…

阅读全文

HenCoder Android 开发进阶:自定义 View 1-3 drawText() 文字的绘制

自定义 View 1-3 drawText() 文字的绘制 这期是 HenCoder 自定义绘制的第三期:文字的绘制。 之前的内容在这里: HenCoder Android 开发进阶 自定义 View 1-1 绘制基础 HenCoder Android 开发进阶 自定义 View 1-2 Paint 详解 如果你没听说过 HenCoder,可以先看看这个: HenCoder:给高级 Android 工程师的进阶手册 简介 上期的 Paint 详解里已经说过,文字的绘制所能控制的内容太多太细,必须拆成单独的一期专门来讲。今天这期,就是来把这些细节讲清楚的。 需要说明的有两点: 和上期一样,这期讲的是细节,其中有一部分内容并不是很常用,所以这期你不必要求自己把内容全部背会,而只要做到全部理解,知道都有什么东西,大概怎么用就好,到你真正需要用的时候再拐回来看就是; 除了常用和不常用的内容,…

阅读全文

HenCoder Android 开发进阶: 自定义 View 1-2 Paint 详解

自定义 View 1-2 Paint 详解 这期是 HenCoder 自定义绘制的第二期: Paint。如果你没看过第一期,可以先去看一下第一期: HenCoder Android 开发进阶:自定义 View 1-1 绘制基础 简介 上一期我已经简单说过, Canvas 的 drawXXX() 方法配合 Paint 的几个常用方法可以实现最常见的绘制需求;而如果你只会基本的绘制, Paint 的完全功能的掌握,能让你更进一步,做出一些更加细致、炫酷的效果。把 Paint 掌握之后,你几乎不再会遇到「iOS 组可以实现,但你却实现不了」的绘制效果。 由于依然是讲绘制的,所以这期就没有介绍视频了。绘制的内容一共需要讲大概 5~6 期才能讲完,也就是说你要看 5~6 期才能成为自定义绘制的高手。…

阅读全文

HenCoder Android 开发进阶: 自定义 View 1-1 绘制基础

自定义 View 1-1 绘制基础 从今天开始,HenCoder 就正式开讲知识技能了。按照我的计划,第一季是 UI,UI 一共分为三部分:绘制、布局和触摸反馈。本期是绘制部分的第一期。绘制大概会用 5~6 期的时间讲完,整个 UI 的绘制、布局和触摸反馈三部分大概会用十来期。更新频率大约为每周一更(不承诺哟)。 如果你不知道 HenCoder 是什么,可以先看这里: HenCoder:给高级 Android 工程师的进阶手册 自定义绘制概述 二话不说,我反手就是一个视频: 首先总结一下视频中的关键点: 自定义绘制的方式是重写绘制方法,其中最常用的是 onDraw() 绘制的关键是 Canvas 的使用 Canvas 的绘制类方法: drawXXX() (关键参数:Paint) Canvas 的辅助类方法:…

阅读全文

HenCoder:给高级 Android 工程师的进阶手册

HenCoder:给高级 Android 工程师的进阶手册 是什么? 对,标题没写错,我是认真的。给高级 Android 工程师的进阶手册。如果你做 Android 开发,如果你做到了高级但自感遇到了技术瓶颈无法继续提升,可以试试看这里。 这件事的准备工作,我做了整整一年。 为什么? 决定做这件事,源于一年前我和老婆的一次对话。 我:「又拒了个技术分享邀请。」 老婆:「为什么?」 我:「不知道讲什么。」 老婆:「江郎才尽了?」 我:「才尽了。真的不知道讲什么好,选题太难了。关键是选不到对听众有用的题。其实说实话,让我选一个大家关心的技术话题,上台去逼逼几十分钟,让大家听得热血沸腾鼓掌叫好,这一点都不难。但是这种分享大多数时候对听的人并没有什么帮助,虽然他们在听的时候会觉得受益匪浅。」 老婆:「你连粉丝都黑。」 我:「我说的是真的。他们虽然会觉得,哇塞讲得好牛逼啊,我还要学习一个啊,但其实一个分享听下来或者读下来,他们的技术并没有得到任何长进。…

阅读全文