2016-9-26
2016-9-23
  
带着问题一步一步深入分析 Android 中的 SharedPreferences 源码,最后得出问题的答案。

2016-9-2
  
蚂蚁金服开源的 Android 编译辅助工具 Freeline,将之前漫长的编译过程缩短到秒级。集 Buck 和 Layoutcast 的优点,跨平台、全版本支持。

2016-8-31
  
MVP,RxJava +Retrofit+okhttp 完美结合,遵循材料设计,5.0 高级特性,RecycleView + CardView

2016-8-30
  
android 中级攻城狮学习资源

  
android 中级程序员阅读源码必备姿势

2016-8-28
  
mpush,是一款开源的实时消息推送系统,采用 java 语言开发,服务端采用模块化设计,具有协议简洁,传输安全,接口流畅,实时高效,扩展性强,可配置化,部署方便,监控完善等特点。同时也是少有的可商用的开源推送系统。

2016-8-18
  
Android 4.1 对于 UI 绘制性能提升项目的介绍,包括 Vsync、Triple Buffer、Choreographer。 通过类似时钟中断的 Vsync 信号通知 CPU 实时处理; 通过 Triple Buffer 解决 16ms 内 CPU、GPU 未处理完导致延时问题; 通过 Choreographer 实现不同 Vsync 信号达到时,不同级别绘制回调的统一中控处理,如 CALLBACK_INPUT 优先级最高,CALLBACK_ANIMATION 优先级其次,CALLBACK_TRAVERSAL 优先级最低。

2016-8-12
  
介绍了多种 App 进程保活手段及适用范围

2016-8-11
  
Security Guide for Developers (实用性开发人员安全须知)

2016-8-5
  
介绍 Android N 的混合编译运行模式,以及它对热补丁机制的影响

2016-7-29
  
展示了如何构建一个包括基础服务(SpringMVC),运营配置系统(JS)以及 Android 客户端的小型系统(包括源码及讲解),对全栈有兴趣的可以拿来学习。

  
-最佳实践理论总结 -最佳实践 Junit+mockito+powermock+robolectric+jenkins 搭建单元测试及自动化测试。

2016-7-28
  
为了方便自动分析内存解决 Stop Allocation Tracking 卡死的问题,从 Android Studio 源码和 Dalvik 虚拟机源码分析 Allocation Tracking 的过程,从而达到不影响手机本身性能的情况下获取申请对象信息

2016-7-25
  
An overview of ES6 features.

  
ES2015 [ES6] cheatsheet containing tips, tricks, best practices and code snippets

  
详细介绍了 JS 中调用 OC 方法的流程。在 JS 层和 C 层都有一个 Bridge,里面保存了相同的模块配置表,包含了 OC 暴露给 JS 的方法信息。JS 调用 OC 方法时,通过 Bridge 里的配置表查询得到 Module ID、Method ID、Callback ID 等传递给 OC,OC 通过模块配置表找到对应的方法执行后,调用回调。

需要注意的是 JS Bridge 并不会主动把数据传递给 OC Bridge,而是添加到一个队列中,当 OC 过来调用 JS 任意方法时,再把这个队列返回给 OC。具体如下图:


2016-7-22
  
Android单元测试之Mockito浅析

  
Google I/O 2016 笔记之Layout新世界-ConstraintLayout

  
Android开发中的图像压缩是一个很重要的部分。而这篇文章会让我们从另外一个角度来认识Android平台下的图像压缩和优化。

  
Espresso 是 Google 官方提供的一个易于测试 Android UI 的开源框架 .

  
从底层框架、学习成本、易用性、性能、工具链等多方面对 React Native 和 Weex 进行对比

2016-7-21
  
告别繁琐的ViewPager指示器开发,轻轻松松使用MagicIndicator打造各式各样的指示效果。

2016-7-18
  
ArchSummit 深圳 2016 Slides 下载合集,各端都有些不错的 Share

2016-7-15
  

一个十几年开发经验的老司机对一些热点如 OO 与 FP、微服务、重构的看法,很多观点不谋而合。如:

  1. 设计的基本原则一直通用,不分语言。
  2. FP 早期能更快速完成任务,但 OO 比 FP 更适合复杂场景和大工程。
  3. 微服务的拆分粒度是个需要把握的度,过大不能充分解耦,过小则破坏了问题本身整体性同时使得系统复杂。
  4. 重构更多是系统模块层次结构性的重构,系统重新设计重新划分模块,对于系统内重构因为对外部职责单一所以可整体替换。

2016-7-14
  

介绍了 Facebook 用 FlatBuffers 优化信息流等,介绍 FlatBuffers 的存储格式及 FlatBuffers 的好处,包括:

  1. 解析速度更快
  2. 内存占用更少
  3. 更灵活,可单独快速读取部分属性不用群不解析
  4. 跨平台、库很小、编译时类型校验

  
FlatBuffers 是一个高效的跨平台序列化类库,效率远高于常用的 JSON,可以在 C++、C#、C、Go、Java、JavaScript、PHP 和 Python 中使用。是 Google 开发的,是为了应用在游戏开发,以及其他注重性能的应用上。

  
从总体设计和原理上对 ImageLoader Picasso Glide 几个图片缓存进行对比,介绍他们各自的特性以及某些特性上的实现。

2016-7-13
  

分享了携程目前移动端的网络服务情况。分析了网络服务可能的问题以及对应的优化。优化手段包括:

  1. 优化 DNS 解析和缓存
  2. 根据网络质量动态改变网络请求策略及配置
  3. 提供网络服务优先级和依赖机制
  4. 提供网络服务重发机制
  5. 减少数据传输量
  6. 通过 CDN 加速、动静资源分等手段优化海外网络性能

  
《ECMAScript 6 入门》是一本开源的 JavaScript 语言教程,全面介绍 ECMAScript 6 新增的语法特性,网站:http://es6.ruanyifeng.com/

  
Original Apollo 11 Guidance Computer (AGC) source code for the command and lunar modules.

2016-7-12
  
通过将修改后的类重新打一个 Patch Dex,并在 ClassLoader 加载 Dex 前将 Patch Dex 插入到 Dex 数组前面实现热修复,并解决类检查的 Preverify 问题。

此方案因为去掉了 Preverify,导致 Verify 与 Optimize 延迟到类加载时刻,会有一定性能损耗。


2016-7-8
  
IntentService 是比较少使用的,如果你没听过也不意外,就像 HandlerThread 很多开发者没用过或没听过,不过我也仅仅是在demo中使用。Google 为方便开发者使用,提高开发效率,封装了 IntentService 和 HandlerThread。HandlerThread 继承自 Thread,内部封装了 Looper。那 IntentService 呢?

2016-7-5
  
组件化开发就是将一个app分成多个模块,每个模块都是一个组件(Module),开发的过程中我们可以让这些组件相互依赖或者单独调试部分组件等,但是最终发布的时候是将这些组件合并统一成一个apk,这就是组件化开发。 插件化开发和组件化开发略有不用,插件化开发时将整个app拆分成很多模块,这些模块包括一个宿主和多个插件,每个模块都是一个apk(组件化的每个模块是个lib),最终打包的时候将宿主apk和插件apk分开或者联合打包。

  
豌豆荚被阿里收购,致敬这个 Google Style 的公司。

经过六年,我相信的很多事情仍然没有改变。是的,我碰了不少钉子,明白努力不一定会有回报,好心也不一定能得到所有人的理解和认可... 但我并不想因此吸取什么「在中国不能这样或那样做事情」的教训。即使更难,我仍然会按照我认为对的方式去继续向前,这样子才能问心无愧。

创业没有终点,如果是一个使命驱动的团队或个人,根本没有「退出」这个选项。不管是最初创业,还是 2013 年选择保持独立、扩张品类,还是今天做出的选择,我们都会问自己,哪种选择才能帮助我们更好地达成我们的使命?成功与否,我始终认为要看自己追求的是什么,而不是某个世俗的标准。何况,即使按世俗的标准,我和我们的团队也是非常成功的,我们应该为自己创造的一切感到自豪。再过几年,豌豆荚拥有了更大的规模和影响力,我会很高兴在今天做出了这样的决定,让它发展得越来越好。

生命短暂,我还希望能创造出更有影响力的作品,继续专注在我真正 passionate 的事情上,帮更多的对世界保持兴趣的人去发现更大更美好的世界。也许在外界看起来,这些事情会更... 你懂的,但我觉得如果我没有做这些事情,哪怕赚了再多好几个数量级的钱,当我老去的时候,才会「因碌碌无为而感到悔恨」。那才是真正意义上的失败。


  
详细盘点了主流的开源数据库及存储方案和背后的设计思想以及适用场景,包括 MySQL、PostgreSQL、嵌入式存储引擎、memcached、Redis、Twemproxy、MongoDB、HBase、Cassandra、Spanner、中间件等等

2016-7-4
  
关于国内几大互联网创始人、管理层、投资人的控制权争夺,以及如何保持创始人或者管理层的控制权建议,如:

网易的创始人,管理层,大股东丁磊一人独揽;

新浪的毒丸计划和管理层回购;

百度的牛卡方案,以及京东的AB股方案,同股不同权;

阿里的合伙人制度和投资方的授权。


  
天猫热修复对于启动阶段 Crash 的解决方法

2016-6-30
  
由微信读书的 bang 开源的 JSPatch 是国内应用最广泛的 iOS 热修复方案,bang 详细介绍了 JSPatch 的起步、发展和下一步计划。替代早期的嵌入 Lua 引擎的 waxPatch,不断优化。

2016-6-27
  
介绍了热补丁的作用,如在线修复 Bug、灰度发布、远程调试等。

全面对比了支付宝的 AndFix、QZone 的 Classloader 方案优缺点,如 AndFix 无法替换类,无法新增变量,兼容性麻烦,QZone 的方案对性能有影响同时 patch 包可能过大。同时简单介绍了他们自己的方案——全量替换新的 Dex 的实现及优缺点。

信息量很大,最后参考的文章里也有些不错的信息。


2016-6-23
  
React Native 的 ES5 ES6 混用会让新手不知所然,如:

require VS import

React.createClass VS extends Component

module.exports VS export default

getInitialState VS constructor


2016-6-22
  
利用 Java 的 Instrumentation 修改 Eclipse Plugin 运行时行为——通过 ASM 框架修改 Android 打包时的字节码,从而实现 App 日志手机,比如网络性能监控、Activity 生命周期监控等

  
Java Instrumentation 指的是可以用独立于应用程序之外的代理(agent)程序来监测和协助运行在JVM上的应用程序。Instrument 提供 premain 和 agentmain 方式,可分别在程序运行前和运行中监控虚拟机运行情况,同时可用来对程序做一些动态修改

2016-6-20
  
简单介绍了 JSX 的不同场景的使用方式以及发布流程

2016-6-17
  
Android 默认的 MultiDex 的方案可能会引起应用首次加载时出现明显的黑屏甚至明显的 ANR,微信对比了自己 Dex 类分包和加载方式的方案和 Facebook 的方案,并进行结合优化解决了这一问题

  
详细介绍了已经初步成型的菜鸟网络发展史以及目前的五大网络生态图

  
MultiDex 之前,64k 方法数与 LinearAlloc 线性内存大小的限制曾经是很头疼的问题,这里详细分析了这两个问题的原因以及预防方式

2016-6-16
  
Android 多渠道打包工具,利用 Zip 文件格式中最后的 Comment 部分写入不同的渠道号,利用该技巧同样可以写入其他信息,如 Apk 来源的页面,可见 一种为 Apk 动态写入信息的方案

  
领导与管理的区别,如何更好的领导知识工作者,尤其是程序员这个团体

微信公众号-Android 经验分享
微信公众号-Android 经验分享