悼文

已经过去一周了,还是会在夜里睡不着,一切都太突然,好像一场噩梦。

上周二下午,匆忙把衣服塞进背包里,就小跑着去了机场,离定的飞机航班还有3个小时,只是当时的心情令我分秒必争。差不多花了一个小时的时间,就出宿舍到了机场,一边焦急地看着时间,一边在心里默念祈祷。终于熬过了2个小时的等候时间,在飞机上拨通了母亲的电话。「是的,世上少了一个疼爱我的人」。

ViewPager 中的那些坑

ViewPager 作为展示一组页面的容器,在Android上被广泛使用,这边文章将围绕 ViewPager 如何显示页面展开,接口如何设计展开。

PagerAdapter 的接口设计

ViewPager 是与一组页面进行交互的容器,那么怎么设计交互的接口就成为设计成败的关键。我们会发现 ListView 中使用的「通信接口」是 BaseAdapter, 那么类似地,ViewPager 在设计的时候, 同样采用了 Adapter 的设计模式, 通过 PagerAdapter 来实现交互。

我们要达成的协议应该如下,ViewPager 负责显示页面,刷新页面,处理滑动等逻辑,而 PagerAdapter 负责实现如何渲染界面等具体接口。ViewPager 不直接操作页面,把这一切逻辑都放在 PagerAdapter 里面去,甚至页面复用这些逻辑也交由 PageAdapter 处理。那么我们来看看 PagerAdapter 是如何定义的?

从实际例子出发讲解面向组合子编程

前言

一直以来想要表述下,在这几年的时间里面对 OO(面向对象) 和 CO(面向组合子编程) 的理解,终于在闲暇时间里,可以好好阐述下这个思想。

关于 OO(面向对象) 和 CO(面向组合子编程) 的理解,有一个很有意思的描述:

OO:白马是白色的马。 CO:白马非马,是由「白」和「马」组成的。

这个理解在一定程度上是正确的,但是更像是面向组件编程,而离「面向组合子编程」还是有一定的差距。面向组件更像是对「组合与继承」的一种反思,组合子编程则更类似于 「编写一门领域语言」。在接下来的章节里面,我们将为什么要「善用组合」,然后如何将思维进阶到「组合子编程」里面来。

Android Annotation 实战

什么是注解

Java 注解又成为 Java 标注, 是 Java 语言在5.0版本以上开始支持加入源代码的特殊语法元数据。

我们常见的 @Override, @Despited 等这些都是注解,注解是一种可以在 Runtime, Source, Class 三个级别上来提供给我们进行语义表达的特殊数据格式。

JDK 定义了四中基础的注解元数据,分别是 @Documented, @Retention, @Target, @Inherited。

EventBus 终极源码解析

EventBus 需要解决的问题

在日常编码里面,我们会遇到很多网络请求,数据库操作等等,一般情况下这些操作都是通过观察者模式来实现的。通过Volley来简单举个例子:

ImageRequest request = new ImageRequest(url,
    new Response.Listener<Bitmap>() {
        @Override
        public void onResponse(Bitmap bitmap) {
            mImageView.setImageBitmap(bitmap);
        }
    }, 0, 0, null,
    new Response.ErrorListener() {
        public void onErrorResponse(VolleyError error) {
            mImageView.setImageResource(R.drawable.image_load_error);
        }
    });