读《C++ Primer》之零长度数组

Android

在书的4.3.1章节“创建动态数组”中,对比数组变量和动态数组时,提到:

C++虽然不允许定义长度为0的数组变量,但明确指出,调用new动态创建长度为0的数组是合法的。

前半句话引起了我的好奇,根据使用 Java 的经验,我知道这是可行的。所以,我验证一下。

int main() {
    char a[0];
    return sizeof(a);
}
[ Read More » ]

读《C++ Primer》之返回值与缓冲区

Android

在 Unix 系统中,通过echo $?,获取 main 函数的返回值。习题1.2,在 main 函数中,返回-1。通过上述方法查看,发现结果是255。这是为什么?

从 Wikipedia 的 Exti Status词条,可以看到如下说明:

SUS specifies that the low-order 8 bits of the status value contain the exit status;[4] this can be retrieved using the WEXITSTATUS macro in wait.h.[5] As such, on POSIX-compatible exit statuses are restricted to values 0-255, the range of an unsigned 8-bit integer.

[ Read More » ]

Compile Android Source on Mac OS X

Android

在我看来,学习 Android 的一个有效途径就是阅读它的源代码,尽管市面上有各种各样的宝典、秘籍,但能从根源上把问题讲得透透彻彻的少之又少[推荐1]。我曾经在2010年编译并走读过它部分代码,但相比它浩瀚的代码,做的功课只是九牛一毛。

这段时间,我重新拾起丢掉的任务,计划在 MacBook Pro 走读代码,为了配合验证观点,很有必要对源代码加些注释,修改些代码。所有的这一切首先要做到将原生的 Android 源码编译通过。

[ Read More » ]

图解ListView的刷新过程

Android

ListView是 Android 应用开发中,常见的视图类组件,其普及程度差不多与 HTML 中的Table一样。此类组件的本质是将数据,也就是Model,表现出现,但其本身不负责维护数据,属于“来料加工”。

那么ListView又是怎么获得数据渠道呢?答案就是Adapter,其顾名思义就是“适配器”。就像笔记本加入市电,需要用电源适配器一样,原始数据不大可能直接显示给用户,就需要一个数据适配器,转换成视图所支持的样子。

到这里,数据已经可以展现给用户了,但是还面临一个问题,即如果数据更新了,视图能不能将新数据替换旧数据?在 Android 中,掌控数据、充当 Controller 角色的是Activity,它应该是知道数据有变化的,同时,它还持有 ViewAdapter

[ Read More » ]

遭遇git send-email和svn patch

长假后的第二天,上头传来了加强代码质量的“旨意”,目标是每一次代码提交都得先给 leader 审核。那么如何落实呢?先导出 patch 文件,然后 email 给责任人,收到对方明确的通过意见后,才能执行 commit。–这种方法似乎很类似 Linux Kernel 的情形,我倒也不反对。

但如此一来,审核环节就成了一个瓶颈,整个的开发行为也就变得串行化。最后方案初步调整为,在 SVN 仓库新开一个分支,专门用于开发人员的提交,开发人员修改后发出 patch 给同事审核,通过后提交到分支。再由 leader 逐个审核分支提交,将认为 OK 的提交合并到主干。这样,主干上始终保持着被认为是合格的代码。

[ Read More » ]