代码改变世界

Android隐喻(三) 图形绘制: Canvas、SurfaceView、Paint、Surface、SurfaceHolder、Bitmap

2012-07-04 15:14 by CreateLight, 9320 阅读, 0 推荐, 收藏, 编辑
摘要:如果你是画家,有一群人想要看你的画,想象一下整个流程。 首先找一块画布,执笔,绘制,完成后找一面墙把画挂上去,众人围观。其中不可缺少的要素包括:画布、(画家拿笔)绘制、挂墙展示。对于计算机,也就对应着 帧缓存、像素填充、刷新至屏幕。如果你希望显示一些东西,那么首先你需要拿到一块缓存,然后向这块缓存中填充像素(也就是绘制),然后将这块缓存交给屏幕显示出来。 Android中的图形绘制,不外如是。 来看一下典型的绘制-显示代码:class GameView extends SurfaceView implements Callback{ @Override public void s... 阅读全文

Android隐喻(二) 启动

2012-07-03 21:41 by CreateLight, 537 阅读, 0 推荐, 收藏, 编辑
摘要:现代分时操作系统多以进程为基本单位,Linux亦不例外。 手机启动如同PC,上电、硬件自检、加载操作系统、内核初始化、启动第一个进程、启动更多的进程、处理用户交互。 Android基于linux,第一个(用户级)进程是init,后续所有进程都是由此进程派生出来,linux进程创建(派生)的系统调用为fork,其语意为“分支”。比如一条道路,你在其上行走,遇到一个二叉分支路口,在这个路口之前所有东西都是相同的,在这个路口之后分成两条支路行进。于此类似,一个进程fork出来的子进程,在其诞生之时和父进程完全一样,只是其后(可能)走向不同的分支。 init会fork出很多linux的基本服... 阅读全文

Android隐喻(一)我的android苦痛史

2012-06-14 16:48 by CreateLight, 441 阅读, 0 推荐, 收藏, 编辑
摘要:断断续续学android有三周了,期间做了一个宠物养成类的小游戏,有些学习的感悟,记录一下。一开始学android,走的是由点入面的老路子:下sdk,搭环境,写hello world。然后下了google的sdk文档和开发指南,买了本android书(《精通android3》),从头开始学。学四大件,然后xml布局,恍惚间似乎已然学会了,看了下书的目录,剩下的无非就是对特定功能api的学习,比如各种控件、http、多媒体、map、opengl-es、lbs等等,到用这些功能的时候再翻看这些内容似乎就OK了。但随着不断的看书,我的内心却感到莫名的恐慌,我感觉我什么都不会,感觉无法控制大局,就好像 阅读全文

Android学习笔记(一) - 如果我们来设计Android

2012-02-25 12:12 by CreateLight, 1619 阅读, 1 推荐, 收藏, 编辑
摘要:大家应该都背过公式,对于背公式,大体上有这么几种做法: 1,死背。 2,看公式的证明,并看懂。 3,尝试自己证明公式,而后对照“标准”证明。一般来说,对公式的记忆和使用:3 > 2 > 1。这里只是说明这样一个事实,不打算探究其原因,有兴趣者可以自行翻阅记忆和认知心理学相关书籍。对Android最熟悉的人是谁?自然是设计并实现它们的工程师。那么,如果我们自己来设计Android,会是怎样的结果呢?1, 我们的需求移动计算火了,我们要做移动计算平台。这个平台应该尽可能支持各种设备,无论是平板电脑、手机、机顶盒还是电冰箱。这个平台应该尽可能支持各种体系结构,无论是X86、ARM还是MI 阅读全文

再读《人件》(二) - 首先,要有人

2012-02-25 00:50 by CreateLight, 1595 阅读, 1 推荐, 收藏, 编辑
摘要:Bingo! 正如你所猜测的那样,这篇文章是讲人员招聘的。感谢计算机,正因为有了它,我们不需要真的有水果,就能玩切水果的游戏。如果你是一个水果罐头制造商,那么你需要操心的是从哪里购买水果原料、怎样运输、怎样建造厂房、购买机器、怎样推广销售你的罐头以及最后的 —— 招人,通过培训使他们成为流水线上合格的标准的零件。如果你是水果软件开发商,和罐头商不同,你很可能一开始就为人忧虑,而不是原料和机器。这样的事实暗示了这样一个道理:对于软件开发公司,人是最重要的资产。招聘软件开发人员是很困难的,最困难的大概就是如何确定他就是你要找的The One。在确定这件事之前,还有一件事要确定:你真的知道你要找什么 阅读全文

什么是好代码?

2012-02-24 21:19 by CreateLight, 2389 阅读, 2 推荐, 收藏, 编辑
摘要:1,定义 让我们来谈谈代码。 代码重要吗?当然,代码就是设计(Jack W.Reeves, 1992);代码是最有价值的交付物。 我们需要好代码吗?在给“好代码”下个定义之前,这个问题无法回答。 那么,究竟什么是好代码? 闻到硝烟味了吗?哦不,战争从来不是好东西。 对我而言,好代码就是 “整洁可用” 的代码。 好代码首先必须是“可用”的代码,“可用” 是指代码做了它应该做的事情,而且做得不错。如果让你写求绝对值的代码,你就不能写成求平方根的;如果让你做一个文本编辑器,OK,你做出来了,它不是一个图片编辑器,它确确实实就是一个文本编辑器,但是用户输入一个字要一分钟,这也不能称之为“... 阅读全文

再读《人件》(一) - 源于创业

2012-02-21 11:02 by CreateLight, 330 阅读, 0 推荐, 收藏, 编辑
摘要:在软件工程领域,《人件》(《PeopleWare》)是一本赫赫有名、饱受赞誉的书。这本书强调是:对软件开发公司,人永远是是第一要素,因此所有的活动都应该围绕人来进行,简单来说就是选择合适的人,并采取一切措施来让人(员工)各方面都“爽”,这样他们会以高效、高质的工作来回报你(及他们自己)。 大约2年前,我刚进入管理岗位,毫无经验,被项目中的高员工流动率、进度延期、质量不足等各种问题搞得焦头烂额,恶补了一堆管理方面的书籍,其中就包括这本《人件》。当年简单的翻阅了一下,了解了大致内容,对此嗤之以鼻,认为书中描述的内容太乌托邦,对于天朝的***民们是不适用的,理想是美好的,但我们还是先回到现实吧。所... 阅读全文

C\C++ 程序员从零开始学习Android - 个人学习笔记(十) - java基础 - 多线程(待续)

2012-02-13 21:21 by CreateLight, 503 阅读, 0 推荐, 收藏, 编辑
摘要:1,多线程和多进程区别 多进程中的每个进程都有自己独立的进程空间。 多线程中的每个线程有自己独立的栈空间,但是共享其它数据(堆、方法区等)。 一般而言,多线程拥有更小的创建开销、更快的速度,更麻烦的编码。2, 为什么要并发? 分时系统,增强用户响应。 因为外设(典型的如IO)阻塞时,可以让CPU处理其他任务。 充分利用多核或多CPU架构提升性能。3,创建线程 class MyRunnable implements Runnable { void run(){ //do sth...} } Runnable r = new MyRunnable(); Thread t = new T... 阅读全文

C\C++ 程序员从零开始学习Android - 个人学习笔记(九) - java基础 - 异常

2012-02-12 17:51 by CreateLight, 349 阅读, 0 推荐, 收藏, 编辑
摘要:1,概述 异常是错误处理的一种手段,相比传统的返回错误值的做法,java更推荐异常处理,因为这可以分离正常代码和错误处理代码,让代码看起来更清晰。错误一般可分为两类: a, 逻辑错误,这种错误都是由于程序员错误的思考造成的。 b, 外界错误,比如用户进行错误的输入、内存用尽、硬盘空间不足、网络无链接、服务器无法访问等。 当遇到一个错误并决定抛出异常时,首先会构建一个异常对象(在堆上,如同构建其他任何对象),然后停止当前方法的执行路径,立刻退出当前方法,并且不会返回任何值,接着异常处理机制会开始搜索这个异常的处理器,继续执行程序。2,分类: 2.1,所有异常类都继承于Throwable类或其子孙 阅读全文

C\C++ 程序员从零开始学习Android - 个人学习笔记(八) - java基础 - 继承、抽象类、接口、内部类(待续)

2012-02-02 16:04 by CreateLight, 537 阅读, 0 推荐, 收藏, 编辑
摘要:1,继承使用extends从一个现有类(super类)继承一个子类。可以用final修饰一个类,使其不能被继承。子类不继承super类的构造器。子类继承super类的方法和域变量。java是单根继承体系,Object类是所有类(包括接口和抽象类)的最根部(super)的类。Object类没有super类。1.1 方法继承 所有的非构造器方法默认都是可被继承的;子类可访问父类中除了private修饰的任何方法。 子类可覆盖(override)super类中继承的方法。使用final关键字修饰,可令相应的方法不允许被子类覆盖。 子类覆盖super类的方法时,方法的可见性只能增加(变宽)或不变... 阅读全文