初交 Google Flutter

蒲柳之姿,望秋而落;松柏之志,经霜弥茂。

引言源自之前在微博上看到的一句话。

很抱歉的是,博客坚持两年的两周一更,未来或许要变为一月一更了。工作和生活上的事,将曾经的周末也挤压的残缺不全,或许这并不是一件坏事,Just move on。好,下面进入正题。

小结 Android 中的自定义 View 套路

君子藏器于身,待时而动。

Android 中的自定义 View,是个老生常谈的话题了,从简单到复杂的,应有尽有。原生控件满足不了需求,网上找到的 Demo 有所欠缺时,往往需要我们撸起袖子自己干。不过,所谓万变不离其宗,返璞归真,一般也就那些套路,深入理解套路,并勤加练习,相信随着时间的洗礼,自会更上一层楼。

浅谈 Android 中的富文本之强大的 SpannableString

如果你昨天的成绩了不起,说明你今天做得还不够好。

至这一篇文章,我个人搭建的博客成功运营两年了,每两周更新一篇想写的冰山一角。两年,不长,好多都物是人非,莫忘初衷,就继续下去吧,Move on。好,开始正题。

Android 中,显示文本都是基于 TextView 控件,往往样式没什么额外惊喜。若我们想自定义个性的颜色、样式,甚至带超链接等,就不得不请出将要谈到的 SpannableString。

深入 Android 性能优化二:谈谈 systrace

干就完了。

这段时间,在币圈和技术圈,引言上这句话看到过好几次,怎么理解,见仁见智。个人觉得,对任何事,早早确立方向,不用想太多,生活形成一种习惯,莫忘初心,干就完了。好,不废话了,最近接触性能监控和优化方面的活,之前也作过一篇性能优化方面的概要介绍,这次来安利一款性能优化工具即 systrace。

Java 并发编程梳理三:浅谈 volatile

这世界上没有什么能阻止一个有正确态度的人完成他的目标,而一个态度不对头的人是无可救药的。

浅析完 synchronized,这次来谈谈“程度较轻的 synchronized”,即 volatile。相较于 synchronized,volatile 需要的代码少一些,运行时的开销也较少,但是,其仅能实现 synchronized 的一部分功能。

Java 中的 I/O 小结

虽有嘉肴,弗食,不知其旨也;虽有至道,弗学,不知其善也。是故学然后知不足,教然后知困。知不足,然后能自反也;知困,然后能自强也。

Java 中的 I/O 操作主要指使用 Java 进行输入和输出的操作。Java 的 I/O 机制是基于数据流进行输入和输出的,数据流即表示字符或者字节数据的流动序列。初学的时候感觉繁杂,难以摸清规律,而今,对 Java 中的 I/O 作一简单小结。

浅探美团点评的模块化框架 Shield

风过雁渡无声影,深入世俗不迷失。

想必,随着美团点评业务的不断壮大和复杂化,其特定业务的场景中,产生的定制化需求也越来越多。往往是,单一的页面也需要根据不同的业务、乃至不同的用户展示出不同的内容。在这样的背景下,“盾牌” Shield 便应运而生,其帮助将一个复杂的页面切分成多个模块,以利于更高效地开发与维护,如此,在移动互联网的大潮下,为整个集团内部的多种移动端 App 保驾护航。

由 Java 引谈到 TypeScript

天下事有难易乎?为之,则难者亦易矣;不为,则易者亦难矣。

近来,接触到动态化 UI 框架应用到 Android 中的混合开发,使用的是微软的 TypeScript 语言。作为使用面向对象语言 Java 的 Android 开发者,会发现两者有很多相似的地方。借此机会,将 Java 和 TypeScript 作一个简单的比较,以归纳总结 TypeScript 简单的通常用法。

深入 Android 性能优化一:概要介绍

此心不于事上磨,更于何处磨此心。

Android 的性能优化,在我们的开发,甚至是面试的过程中,是绕不开的话题。此处,虽说是初探,在这几年的开发中,或多或少对这方面有所注意和部分总结。借此机会,先谈一谈 Android 开发中性能优化的轮廓,后续也定期会有这方面的专题深入。

2017,沉舟侧畔千帆过,病树前头万木春

有时你不用想太多,想象的终归与现实背道而驰,何须对这份执念有所期待?

年年岁岁花相似,岁岁年年人不同。又是一年末,回首这一年的过往,且任由思绪纷飞。脑海中的一片片记忆,如电影桥段似的,一一浮现在眼前。朝着前方奔跑,喜怒哀乐遂成了如烟的往事。活在当下,也罢,Maybe all is well。

深入 Java 中的 HashMap (一)

任何一个傻瓜都能写出计算机能理解的程序,而优秀的程序员却能写出别人能读懂的程序。

引言来自 ThoughtWorks 的首席科学家、《重构》等经典书籍的作者 Martin Fowler。

个人觉得,要写出别人能读懂的程序,不仅要知其然,也要知其所以然。好,这期就来谈谈我们 Android 乃至 Java 开发中使用再频繁不过的的 HashMap (本篇分析基于 JDK 1.8),做到会用,且知道为什么这么用,及其内部的工作机理。

Android 图片加载之浅谈 Glide

Learn something of everything, learn everything of something.

前面谈了老牌图片加载框架 Universal Image Loader,这期谈一下当前流行的 Glide,这是 Google 推荐使用的图片加载框架,其在大多数情况下,一行代码就能搞定图片加载,下面详细来看。

Android 图片加载之深入 Universal Image Loader 源码探究

用勇气改变可以改变的事情,用胸怀接受不能改变的事情,用智慧分辨两者的不同。

文首分享的是一句我已用了 4 年多的 QQ 签名,回首经历的过往,总是自觉字字饶有趣味。好,上期 Android 图片加载之浅谈 Universal Image Loader 知道了 UIL 的简单使用,本期就从源码角度重点探究下这一经典的图片加载框架。

Android 图片加载之浅谈 Universal Image Loader

坚持做自己懒得做但正确的事情,就能得到别人想得到却得不到的东西。

Android 开发中,会遇到加载大批量图片或异步加载图片的场景,这其中,或许会遇到一些问题,如图片错乱,甚至是著名的 OOM(Out Of Memory) 问题。谈及图片加载,本期先谈谈老牌的图片加载框架,即 Universal Image Loader,距今都有着五六年的光景了。

浅谈 Android 中的 Bundle

博观而约取,厚积而薄发。

说起 Bundle,在 Android 开发中再常见不过了,几乎自接触 Android 第一天开始,每天都会用到。不知读者有没有想过这样一个问题,“Android 中为何设计出 Bundle 而不是直接以 Map 结构在 Activity 之间传递数据”,带着问题,下面来对 Bundle 一探究竟。

深入 EventBus 源码探究

学问积年而成,而每日不自知。

上一篇对 Android EventBus 的使用作了简单的小结,我们也知道,EventBus 一直以来也很受开发者的欢迎。EventBus 自 3.0 版本开始,事件的订阅从方法名换成了注解的方式。本篇将解析 EventBus 的源码,以深入理解该框架的实现。

重温 Fragment 分析一:生命周期

天下古今之庸人,皆以一惰字致败;天下古今之才人,皆以一傲字致败。

想必从事 Android 开发的工程师,日常的工作中,总挂在嘴边的离不开 Activity 和 Fragment 了。此前对 Activity 的两个重难点作出过简单的分析,这期,先来谈一谈 Fragment 的生命周期。

Android Unit Test 方案小结:JUnit & Mockito & PowerMock

天之道,损有余而补不足,是故虚胜实,不足胜有余。

从小厂来现在的厂已有半年了,从完全不知道单元测试为何物到断断续续地写了不少单元测试,期间有过痛苦与挣扎,所幸有问题时,咨询大佬能顺利地解决。心怀感激,回首过往,满满的都是成长。这一期,就对单元测试方案来作归纳与小结。

重温 Activity 分析一:生命周期

If you can’t fly then run, can’t run then walk, can’t walk then crawl, just keep moving forward.

记得当初学习 Android 开发的时候,接触的四大组件的第一个就是 Activity,这么久过去了,有时候会问自己,你真得掌握了 Activity 吗?回答是没有。”勿以浮沙筑高台“,借此机会,好好反刍整理下,姑且先谈一谈 Activity 的生命周期。

深入 RecyclerView 源码探究一:宏观设计

生活好像没有我们想得那么简单,但也没有我们想得那样复杂,只不过,想吃芒果和樱桃,就得为了吃得起而努力。

时间如白驹过隙,大半年前,曾写过一篇从 ListView 到 RecyclerView 的用法浅析,当时,只是简单地谈了谈 ListView 与 RecyclerView 的对比与使用。而今,公司项目完全切到 RecyclerView,外界中,RecyclerView 的使用也愈发频繁。因此,在会用的前提下,结合源码深入探究 RecyclerView 便很有必要,打算分几篇来探讨下,这期且谈一谈其宏观设计。

浅谈 Java 中的泛型

不积跬步,无以至千里;不积小流,无以成江海。

Java 中的泛型,在我们的 Android 开发中,用的也是非常多。用好用活泛型,可以大大地增加代码的效率和灵活性。Team 里即将离职的 Mentor 泛型用得蛮溜的,“临渊羡鱼,不如退而结网”,本期就来谈一谈 Java 中的泛型编程。

剖析 View 中的 Invalidate, PostInvalidate 和 RequestLayout

大巧无工,重剑无锋。

View 在 Android 开发中,有着极其重要的地位,甚至比常说的四大组件中的 BroadcastReceiver 和 ContentProvider 都重要。不知大家发现没有,在日常 App 的开发中,大部分时候都是和各种 View 打交道。这次,就来一探开发 View 中用到的 invalidate()、postInvalidate() 和 requestLayout() 的究竟。

Android Debug 简单小结

每一个你不满意的现在,都有一个你没有努力的曾经。

Debug 能力是软件开发过程中分析代码、解决 Bug 的核心素质之一。知乎上有这么一段话说得很好(微改):“每个程序员,都是一个侦探,Log 是凶发现场的线索与证据,凶犯不是特别狡猾时,基本都可以找到真凶。但是总有例外,就需要还原现场 Debug,好比真凶在你的监控下再次模拟行凶,Debug 根据 Log 总能找到问题。打断点就像列举嫌疑人,侦探的第六感和经验至关重要。“

浅谈 Android 中的回调机制

生活的悲欢离合永远在地平线之外,而眺望是一种青春的姿态。

由于回老家过年,博客的更新迟了一周,本篇应该为大年初一更新出来,如今更改时间线,作为上周博客的补更。这次,谈一谈 Android 中的回调机制,经常听人提到回调函数,那么到底什么是回调函数?

浅探 Android 中的 Context

Nobody can go back and start a new beginning, but anyone can start today and make a new ending.

Context 在我们的 Android 开发中,真是无处不在:加载资源、启动一个新的 Activity、获取系统服务和创建 View 操作等。那么问题来了,Context 究竟是什么,具体怎么使用,又有哪些注意事项呢,作为新年第一篇博客,这次来探索 Android 中的 Context。

2016,千磨万击还坚劲,任尔东西南北风

路漫漫其修远兮,吾将上下而求索。

习惯性的文首引言,习惯性的两周一篇博客。正好来到了这一年的最后一天,此刻的我,打开电脑,靠在床上,思绪万千。写一篇年记,权作为年终的盘点,第一次以这样的形式总结这一年,未来每一年也会如此吧,且开个头。如《士兵突击》中许三多所说,“活着要做有意义的事”,而写博客这件事,于我来说,就是有意义的事之一。想将这博客一直写下去,且看能写到何时,向农民伯伯阮一峰二位前辈学习。

浅谈 Java 中的注解

人啊,就是要学会装逼,装着装着就牛逼了。

引言部分源自无意间看到的一段话,觉得蛮有意思的。

上次谈到了 Java 中的反射机制,就着公司重构项目即将用到的 Dagger,本期接着谈一谈 Java 中的注解。其实,许多开源库都用到了注解的方式,简化代码以提高开发效率。

浅谈 Java 中的反射机制

火跳动着绝望/谁在低声吟唱/说遗忘者的哀伤 /用战斗证明希望

说起 Java 中的反射机制,初学者或者 Java 基础不扎实的人或许会有点懵,甚至唯恐避之不及。事实上,Java 的反射机制很重要,许多开发框架都是基于反射来实现对目标对象的操作,反射配合注解,用好用活,能大大提升代码的效率和性能,并且,如今 Android 中一些高效的注解库也与此反射机制有着极大的关联,这期就来探究并总结下。

从 Android WebView 谈开去

目标赋予我们生命的意义和目的。有了目标,我们才会把注意力集中在追求喜悦,而不是在避免痛苦上。

Android 移动设备如手机内置有高性能的 WebKit 内核浏览器,其 SDK 中也有一个 WebView 组件。因此,一部分原生的功能改为 HTML5 开发,Android 与 HTML5 互相通信,实现混合开发。这样,该部分功能能够在不升级 App 的情况下动态更新,同时,可以在 Android 或 iOS 的 App 上运行,节约成本且提高了开发效率。本期就来谈一谈 Android WebView。

我的 Android 训练馆

当一切看起来无济于事时,我去看一个石匠敲石头。他一连敲了一百次,石头依然纹丝不动。但当他敲第一百零一次的时候,石头裂成两半。我知道,让石头裂开的不是那最后一击,而是前面一百次敲击的结果。

Android Volley 研究综述(四)

人生是没有如果的游戏,尽力玩好现在就行了。

小半年前,在 Android Volley 研究综述(三)中,曾说过“未来某天完善”(四),即 Volley 源码的研究综述,本着有始有终的原则,在国庆长假的最后一天,来探究 Volley 的源码,虽说出了一些时新的网络请求框架如 OKHttp,Retrofit 等,但深入经典的 Volley 框架还是十分有必要的。

浅析 Android 中的三大模式:MVC, MVP 和 MVVM (一)

日拱一卒,功不唐捐。

又是一年教师节,首先,恭祝天下的教师们节日快乐。尤其,恭祝所有带过我的老师们,毕竟,没有你们的谆谆教诲,也没有我的今天。而今,虽然尚在魔都挣扎,但毕竟是从小地方一路走过来的,未来的路很长,且歌且行。好,进入这期的正题,简单分析下 Android 中的三大模式:MVC,MVP 和 MVVM。

Android 事件传递机制研究综述(二)

追求卓越,成功就会在不经意间追上你。

半个月前,在时隔很久以后,更新了一篇 Android 事件传递机制研究综述(一)博文,然而,分析大多留于表层,未进行深入挖掘。本篇在上篇的基础上继续深入,从相关源码角度分析事件的分发、拦截以及处理机制,不过,源码基于 Android 早期版本,如今源代码虽有所改动,但大体思想精髓一致。

Android 事件传递机制研究综述(一)

Life is like a box of chocolates, you never know what you’re going to get.

因生活中的一些变故和各种琐屑的事,博客许久未更。我们不知道明天,甚至下一分钟,人生将发生什么改变。或许,能做到的只有珍惜现在的每一分钟,尽力做好每一件事。未来不可测,认真做好每件事,快乐过好每一天,足矣。言归正传,以下即是关于 Android 事件传递机制的研究综述。

Android Volley 研究综述(一)

今天的生活是由三年前我们的选择决定的,而今天我们的抉择将决定我们三年后的生活。

Android 官网对 Volley 的一句话概括如下:

Volley is an HTTP library that makes networking for Android apps easier and most importantly, faster.
即 Volley 是一个 HTTP 库,能让 Android apps 的网络操作更容易,并且最重要的是,更快捷。