首页 > 代码库 > android开发常识(转)

android开发常识(转)

转载于:http://blog.sina.cn/dpool/blog/s/blog_6c234ba90100wj1t.html

 

如何成为高手?
成为一名真正的Android高手必须掌握和遵循的一些准则:
1)学会懒惰
     aDon‘t Reinvent the Wheel(不要重复发明轮子)。
     bInventing the Wheel(发明轮子)。
     cDon‘t Reinvent the Wheel(不要重复发明轮子)。
    “轮子理论”,也即“不要重复发明轮子”,这是西方国家的一句谚语,原话是:Don‘t Reinvent the Wheel。“不要重复发明轮子 ”意思是企业中任何一项工作实际上都有人做过,我们所需要做的就是找到做过这件事情的人。拿到软件领域中就是指有的项目或功能,别人已经做过,我们需要用的时候,直接拿来用即可,而不要重新制造。
2)精通Android体系架构、MVC、常见的设计模式、控制反转(IoC)
3)编写可重用、可扩展、可维护、灵活性高的代码
4)高效的编写高效的代码
5)学会至少一门服务器端开发技术
Android的特点都有哪些?
  1)应用程序框架:支持组件的复用和更换
2)Dalvik 虚拟机:专门为移动设备进行过优化
3)集成的浏览器:基于开源的 WebKit 引擎 ,TV上会内置Chrome浏览器
4)优化的图形机制:自定义的2D图形库,基于OpenGL ES 1.0规范的3D图形实现(本项为硬件加速器可选)
5)SQLite:轻量级的数据库,支持结构化数据的存储
6)媒体支持:面向常见的音频、视频以及静态图形档案格式 (MPEG4, H.264, MP3, AAC, AMR, JPG, PNG, GIF)
7)GSM 技术 GSM:global system for mobile communications (依赖硬件支持)
8)Bluetooth, EDGE, 3G, and WiFi (依赖硬件支持)
9)Camera, GPS, compass, and accelerometer (依赖硬件支持)
10)Rich development environment:丰富的开发环境,包含一套硬件仿真器,一些用于程序调试、内存和性能剖析的工具,以及支持Eclipse集成开发环境的插件(ADT )。
学习android需要哪些基础?
 学习Android一定要有Java基础,最差也要类似Java的其他面对像对象语言的基础。很多朋友从来没有搞过编程,听说Android能赚钱,就疯了一样冲过来要学习。这明显是不靠谱的,甚至有的朋友一个字母一个字母的按照我的例子去敲代码,然后非常努力的把代码背下来。像背英文单词一样的背代码,编程学成这个样子,还真是让小生佩服啊!不管怎样,你最少也要掌握Java语言的如下知识点才能够开始学Android:
a)Java基本数据类型及其特点
b)Java分支语句和循环语句的使用
c)类和对象的创建和使用方法
d)函数的使用
e)抽象类和接口
f)继承和实现
g)对象的多态性
h)包和访问权限
i)异常的处理
j)类集框架
k)eclipse的基本用法
Android上编程用什么语言?
   Android应用基于Java,支持SQL,由于底层是Linux所以底层支持C/C++。
目前有两种编程:
1)基于ADT的JAVA编程
2)基于NDK的C编程
Android编程环境需要哪些?
  编程环境:Ide 、Android SDK、JDK、Java
官方推荐用JDK+ECLIPSE+ADT+ADK(WINDOWS开发环境下。
什么是APK?
 APK是Android Package的缩写,即Android安装包(anapk)。APK是类似Symbian Sis或Sisx的文件格式。通过将APK文件直接传到Android模拟器或Android手机中执行即可安装。
apk文件和sis一样最终把android sdk编译的工程打包成一个安装程序文件格式为apk。 APK文件其实是zip格式,但后缀名被修改为apk,通过UnZip解压后,可以看到Dex文件,Dex是Dalvik VM executes的全称,即Android Dalvik执行程序,并非Java ME的字节码而是Dalvik字节码。
什么是SDK?
 SDK,Software Development Kit 的缩写,中文即“软件开发工具包”。广义上指辅助开发某一类软件的相关文档、范例和工具的集合。
  SDK是一些被软件工程师用于为特定的软件包、软件框架、硬件平台、操作系统等创建应用软件的开发工具的集合,一般而言SDK即开发 Windows 平台下的应用程序所使用的SDK。它可以简单的为某个程序设计语言提供应用程序接口 API 的一些文件,但也可能包括能与某种嵌入式系统通讯的复杂的硬件。一般的工具包括用于调试和其他用途的实用工具。SDK 还经常包括示例代码、支持性的技术注解或者其他的为基本参考资料澄清疑点的支持文档。
什么是API?
  API(Application Programming Interface)其实就是操作系统留给应用程序的一个调用接口,应用程序通过调用操作系统的 API 而使操作系统去执行应用程序的命令(动作)。
其实早在 DOS 时代就有 API 的概念,只不过那个时候的 API 是以中断调用的形式(INT 21h)提供的,在 DOS 下跑的应用程序都直接或间接的通过中断调用来使用操作系统功能,比如将 AH 置为 30h 后调用 INT 21h 就可以得到 DOS 操作系统的版本号。而在 Windows 中,系统 API 是以函数调用的方式提供的。同样是取得操作系统的版本号,在 Windows 中你所要做的就是调用 GetVersionEx() 函数。
什么是TCP协议和UDP协议?
  TCP/IP协议的名称中只有TCP这个协议名,但是在TCP/IP的传输层同时存在TCP和UDP两个协议。Tranfer ControlProtocol的简称,是一种面向连接的保证可靠传输的协议。通过TCP协议传输,得到的是一个顺序的无差错的数据流。发送方和接收方的成对的两个socket之间必须建立连接,以便在TCP协议的基础上进行通信,当一个socket(通常都是server socket)等待建立连接时,另一个socket可以要求进行连接,一旦这两个socket连接起来,它们就可以进行双向数据传输,双方都可以进行发送或接收操作。
UDP协议是User Datagram Protocol的简称,是一种无连接的协议,每个数据报都是一个独立的信息,包括完整的源地址或目的地址,它在网络上以任何可能的路径传往目的地,因此能否到达目的地,到达目的地的时间以及内容的正确性都是不能被保证的。
什么是NDK?
  1)NDK是一系列工具的集合。
NDK 提供了一系列的工具,帮助开发者快速开发C(或C++)的动态库,并能自动将so 和java 应用一起打包成apk。这些工具对开发者的帮助是巨大的。NDK 集成了交叉编译器,并提供了相应的mk 文件隔离CPU、平台、ABI 等差异,开发人员只需要简单修改mk 文件(指出“哪些文件需要编译”、“编译特性要求”等),就可以创建出so。NDK 可以自动地将so 和Java 应用一起打包,极大地减轻了开发人员的打包工作。
2)NDK提供了一份稳定、功能有限的API头文件声明。
Google 明确声明该API 是稳定的,在后续所有版本中都稳定支持当前发布的API。从该版本的NDK 中看出,这些API 支持的功能非常有限,包含有:C 标准库(libc)、标准数学库(libm)、压缩库(libz)、Log 库(liblog)
怎样提高Android应用程序的速度?
首先,我们要先明白“加快”是有两层意思的,第一层是代码执行所需要的时间,第二层意思是用户需要等待用户界面响应的时间。下面是提高Android应用程序运行速度的几条原则。
1)不要让UI线程等待
2)耗时操作不可取
3)模拟器和真实的设备有不同
4)通知用户,要注意用户体验。
Android运行库有哪些?
 Android包括了一个核心库,该核心库提供了JAVA 编程语言核心库的大多数功能。每一个Android 应用程序都在它自己的进程中运行,都拥有一个独立的Dalvik 虚拟机实例。Dalvik 被设计成一个设备可以同时高效地运行多个虚拟系统。Dalvik 虚拟机执行(.dex)的Dalvik 可执行文件,该格式文件针对小内存使用做了优化。同时虚拟机是基于寄存器的,所有的类都经由JAVA 编译器编译,然后通过SDK中的‘dx‘ 工具转化成.dex 格式由虚拟机执行。Dalvik 虚拟机依赖于linux 内核的一些功能,比如线程机制和底层内存管理机制。
Android都支持哪些Java特性
  针对于Java SE或Java EE的程序员想转到Android平台上进行开发,有以下几点常规的支持:
1)目前来看JDK的高级特性均支持,比如说1. Java的反射、2.NIO (New I/O)、3. JNI (Java Native Interface)相对而言对于OpenGL和SQLite的支持比较强大,但是AWT和JDBC这些东西都不支持。
2)在Xml解析上,兼容DOM、XmlPull和SAX,同时数据交换格式上,Android虽然不支持LINQ但对于Java来说JSON同样支持。
3)对于Http处理方面,提供了轻量级的Http处理类,以及更完善的Apache库支持。
4)音频方面Android比较强大,使用了OpenCore库,很多地方我们可以自己编写编码、解码器进行扩展。
5)Android在文件系统上基本山和Java是相同的,不过对于高效率的内存影射文件而言提供了android.os.MemoryFile这个类。
总体而言,Java程序员转入Android开发只需要了解平台特有的,Intent,Service,Receiver和Activity就差不多了,深入了解下AIDL和UI控件和自定义Widget基本上可以胜任常规的工作。
Android最简单播放GIF动画方法是什么?
  GIF动画的原理就是逐帧播放,在Android中提供了AnimationDrawable类可以实现,GIF89A的解码方法在过去的J2ME平台移植到Android平台也能用,其实在Google Android上面开发目前2.2以后的固件支持的方法除了Flash Player外,更好的兼容方法就是使用万能的webkit浏览器了。直接在工程中内嵌一个webView,当然了路径大家可以换成本地的,对于浏览器使用本地资源url为file://开头。
不过webView的资源消耗也不小,开个webView对象可能占用了至少8MB的RAM吧,保守估计,当然更多的要看插件和以及html的复杂程度所决定的。
线程在Android应用当中的作用?
  1)动态更新UI 如AsyncTask 类,在开发Android应用时必须遵守单线程模型的原则: Android UI操作并不是线程安全的并且这些操作必须在UI线程中执行
  2)SOCKET之间的通信
  3)文件的下载
  4)与服务端之间的交互
  5)复杂数据和逻辑的处理
JNI是什么?
 JNI是Java Native Interface的缩写,中文为JAVA本地调用。从Java1.1开始,Java Native Interface(JNI)标准成为java平台的一部分,它允许Java代码和其他语言写的代码进行交互。JNI一开始是为了本地已编译语言,尤其是C和C++而设计的,但是它并不妨碍你使用其他语言,只要调用约定受支持就可以了。
     使用java与本地已编译的代码交互,通常会丧失平台可移植性。但是,有些情况下这样做是可以接受的,甚至是必须的,比如,使用一些旧的库,与硬件、操作系统进行交互,或者为了提高程序的性能。JNI标准至少保证本地代码能工作在任何Java 虚拟机实现下。

 

 

感谢作者给我的启发。