代码改变世界

随笔分类 -  Android

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

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

Android隐喻(二) 启动

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

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

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

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

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

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

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

C\C++ 程序员从零开始学习Android - 个人学习笔记(七) - java基础 - 类和对象的清除(待续)

2012-02-02 12:07 by CreateLight, 539 阅读, 收藏, 编辑
摘要: 1,局部变量的清除 方法内的局部变量,在栈上进行内存分配,当离开局部变量所位于的作用域块后,栈会自动回卷,清除所有此类型的变量。2,对象的清除 和C++不同,java没有提供析构函数。原因如下: a, C++中的对象可以在栈上分配空间,当离开所出作用域时,清除栈对象,此时会调用对象的析构函数;而java中所有对象都在堆上分配空间,没有栈对象。 b,java有垃圾回收机制,所有对象会(在某个时刻)自动进行内存回收,因此不需要显式的在析构函数中回收内存。 尽管如此,java的这些机制并不能完全替代C++析构函数所表现出来的语义和作用。 java提供了finalize方法,垃圾回收器... 阅读全文

C\C++ 程序员从零开始学习Android - 个人学习笔记(六) - java基础 - 类和对象的初始化

2012-02-01 18:13 by CreateLight, 520 阅读, 收藏, 编辑
摘要: 1,定义一个类class A{ A(){ this(3); m = 5; i = 6;} A(int k){i = k;} void f(){ } private int i; private int j = 3; static int m; static int n = 6; static final int k = 11; static final int k2; { i = 7; j = 8; m = 6; } static { m = 9; n = 10; k2 = 15; }}2,new一个实例对象A a = new A();初始化过程:2.1 类加载和初始化 ... 阅读全文

C\C++ 程序员从零开始学习Android - 个人学习笔记(五) - java基础 - 类的定义

2012-01-19 22:05 by CreateLight, 472 阅读, 收藏, 编辑
摘要: 1,java类概述 java中没有全局函数、全局变量,只有类。 每个.java文件能定义任意个数的类,但pulic非内部类只能有一个,并且类名必须与文件名相同。.java文件中可以没有public类,也可以没有和文件同名的类。 每个类(包括内部类、泛型类)编译后都会生成一个.class文件,.class文件的目录结构必须和类的完全限定名(包名.类名)一致,以便类加载器进行搜索及加载。2,定义一个类:Modifer class ClassName{ Modifer ClassName(type param){ } Modifer type method(type param){ } ... 阅读全文

C\C++ 程序员从零开始学习Android - 个人学习笔记(四) - java基础 - 数据类型、变量、字符串、数组

2012-01-19 02:09 by CreateLight, 728 阅读, 收藏, 编辑
摘要: 1,数据类型 java数据类型分为基本类型(原始类型、原生类型)和引用类型两种。1.1 基本类型 包括布尔类型、数值类型、returnAddress类型。1.1.1 布尔类型 boolean,取值false和true。虚拟机对其支持非常有限,没有专用的字节码指令,所有java源代码中的涉及到的boolean运算,编译后都使用int代替。boolean数组,在虚拟机层面,作为和byte数组一样处理。1.1.2 数值类型 分为整型和浮点两种,和C\C++不同,其存储大小、字节序(大端)、符号固定,和机器无关,在所有平台上都一样。 整型包括: byte: 8位(bit)有符号二进制补... 阅读全文

C\C++ 程序员从零开始学习Android - 个人学习笔记(三) - java基础 - 环境和工具

2012-01-19 00:18 by CreateLight, 361 阅读, 收藏, 编辑
摘要: 1,环境: 1.1,JDK - java开发工具箱,包括Java类库(及源代码)、类库文档、Java编译器、JRE等。 1.2,JRE - java运行时环境,想要运行桌面java程序所必备的环境。 在安装目录下有若干可执行文件,即是JDK提供的各种工具。详解见这里: http://blog.csdn.net/hemingwang0902/article/details/66607232,工具: 1.1 编辑器 Eclipse + vi 插件 + 少量自定义快捷键,习惯Emacs的同学可以直接用Eclipse提供的Emacs风格的键绑定。 多用快捷键,少用(不用鼠标)。 1.2... 阅读全文

C\C++ 程序员从零开始学习Android - 个人学习笔记(二) - java基础 - 从源代码到运行

2012-01-18 23:39 by CreateLight, 743 阅读, 收藏, 编辑
摘要: hello world 的起源到终结:先大体写一下,以后会细化。1,写代码 C\C++: 写main函数作为入口,将从main函数开始运行 java: 写包含static void main(String[] args)的类作为主类,将从指定为主类的main函数开始运行,2,编译 C\C++: 通过编译器(cl、gcc、armcc等),src -> 预处理 -> .s(汇编代码) -> .o(目标文件),每个.C文件生成一个对应的.o文件,.o文件包含二进制数据、本地机器码和其他一些用于链接及调试的结构性数据。 java: 通过编译器(javac), src -> .c 阅读全文

C\C++ 程序员从零开始学习Android - 个人学习笔记(一) - 计划和书籍

2012-01-18 19:21 by CreateLight, 2056 阅读, 收藏, 编辑
摘要: 目的 在Android上开发高性能的3D游戏/应用背景 有一定C++基础,无相关工作经验 2年C工作经验 2年移动开发经验(MTK/SPRD) 无任何java基础计划 1,了解Android 2,根据1的信息制定详细的学习计划 3,实施 1,了解Android1.1 现状 市场份额稳定增长,版本众多,目前以2.1 - 2.3为主。最新版本是4.0。1.2 架构 见下图: 应用开发者使用java语言进行开发,调用Android SDK提供的API来进行实际的硬件操作(绘图、网络、按键/触摸响应等)。 APPLICATION FRAMEWORK对上提供开发APP的接口,对... 阅读全文
点击右上角即可分享
微信分享提示