Android入门知识 FAQ

============================================

原文地址: http://zy77612.iteye.com/blog/850249

============================================


Android新手入门 FAQ

 

1、Q:什么是Android?

  A:Android一词的本义指“机器人”,同时也是Google于2007年11月5日宣布的基于Linux平台的开源手机操作系统的名称,该平台由操作系统、中间件、用户界面和应用软件组成,号称是首个为移动终端打造的真正开放和完整的移动软件。简单来说是个开源的手机操纵系统。
  

2、Q:Android就业前景

  A:Android是Google开发的基于Linux平台的开源移动操作系统。它包括操作系统、用户界面和应用程序----移动电话工作所需的全部软件,而且不存在任何以往阻碍移动产业创新的专有权障碍,号称是首个为移动终端打造的真正开发和完整的移动软件。

     国外Android市场正在如日中天的扩展,据市场调研机构最近发布的一份报告称,今年第一季度基于Android操作系统的智能手机在美国智能手机总销量中所占比例达到28%,首度超过苹果iphone,苹果iphone约为21%,相信在不久的将来会有更多的用户选择Android系统的手机或是无线终端设备。


3、Q:Android的特点都有哪些?

  A: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 )。


4、Q:学习android需要哪些基础?
   
  A:学习Android一定要有Java基础,最差也要类似Java的其他面对像对象语言的基础。很多朋友从来没有搞过编程,听说Android能赚钱,就疯了一样冲过来要学习。这明显是不靠谱的,甚至有的朋友一个字母一个字母的按照我的例子去敲代码,然后非常努力的把代码背下来。像背英文单词一样的背代码,编程学成这个样子,还真是让小生佩服啊!不管怎样,你最少也要掌握Java语言的如下知识点才能够开始学Android:

           a)Java基本数据类型及其特点
           b)Java分支语句和循环语句的使用
           c)类和对象的创建和使用方法
           d)函数的使用
           e)抽象类和接口
           f)继承和实现
           g)对象的多态性
           h)包和访问权限
           i)异常的处理
           j)类集框架
           k)eclipse的基本用法


5、Q:Android上编程用什么语言?
   A:Android应用基于Java,支持SQL,由于底层是Linux所以底层支持C/C++。
           目前有两种编程:
              1)基于ADT的JAVA编程
              2)基于NDK的C编程


6、Q:Android编程环境需要哪些?
  
  A:编程环境:Ide 、Android SDK、JDK、Java
            官方推荐用JDK+ECLIPSE+ADT+ADK(WINDOWS开发环境下。


7、Q:什么是APK?
  A: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字节码。


8、Q:什么是SDK?

  A:SDK,Software Development Kit 的缩写,中文即“软件开发工具包”。广义上指辅助开发某一类软件的相关文档、范例和工具的集合。

       SDK是一些被软件工程师用于为特定的软件包、软件框架、硬件平台、操作系统等创建应用软件的开发工具的集合,一般而言SDK即开发 Windows 平台下的应用程序所使用的SDK。它可以简单的为某个程序设计语言提供应用程序接口 API 的一些文件,但也可能包括能与某种嵌入式系统通讯的复杂的硬件。一般的工具包括用于调试和其他用途的实用工具。SDK 还经常包括示例代码、支持性的技术注解或者其他的为基本参考资料澄清疑点的支持文档。

 

9、Q:什么是ADT?

     A:ADT(Android Development Tools):
目前Android开发所用的开发工具是Eclipse,在Eclipse编译IDE环境中,安装ADT,为Android开发提供开发工具的升级或者变更,简单理解为在Eclipse下开发工具,它可以连接sdk和Eclipse,帮助Eclipse找到sdk


10、Q:什么是API?

  A:API(Application Programming Interface)其实就是操作系统留给应用程序的一个调用接口,应用程序通过调用操作系统的 API 而使操作系统去执行应用程序的命令(动作)。

          其实早在 DOS 时代就有 API 的概念,只不过那个时候的 API 是以中断调用的形式(INT 21h)提供的,在 DOS 下跑的应用程序都直接或间接的通过中断调用来使用操作系统功能,比如将 AH 置为 30h 后调用 INT 21h 就可以得到 DOS 操作系统的版本号。而在 Windows 中,系统 API 是以函数调用的方式提供的。同样是取得操作系统的版本号,在 Windows 中你所要做的就是调用 GetVersionEx() 函数。

11、Q:什么是TCP协议和UDP协议?
   
  A:TCP/IP协议的名称中只有TCP这个协议名,但是在TCP/IP的传输层同时存在TCP和UDP两个协议。Tranfer Control Protocol的简称,是一种面向连接的保证可靠传输的协议。通过TCP协议传输,得到的是一个顺序的无差错的数据流。发送方和接收方的成对的两个socket之间必须建立连接,以便在TCP协议的基础上进行通信,当一个socket(通常都是server socket)等待建立连接时,另一个socket可以要求进行连接,一旦这两个socket连接起来,它们就可以进行双向数据传输,双方都可以进行发送或接收操作。

             UDP协议是User Datagram Protocol的简称,是一种无连接的协议,每个数据报都是一个独立的信息,包括完整的源地址或目的地址,它在网络上以任何可能的路径传往目的地,因此能否到达目的地,到达目的地的时间以及内容的正确性都是不能被保证的。

 

12、Q:什么是IPC?

   A:IPC(Inter-Process Communication): 进程间通信

 

 

Android中级进阶 FAQ

 

1、Q:Android开发者应该先看什么文档?

      A:
对开发者来说,最重要的是概念,而DOCS中的Dev Guide里面对其解释十分清晰,请仔细阅读。并可以到eoeAndroid开发者社区中找到很多的文档和学习资料。


2、Q:Android系统架构有哪些?
     
       A:
Android的系统架构和其操作系统一样,采用了分层的架构。从架构图看,android分为四个层,从高层到低层分别是应用程序层、应用程序框架层、系统运行库层和linux核心层。


3、Q:什么是开源?

       A:
开源,意为开放源代码,由Bruce Perens(曾是Debian的创始人之一)定义如下:

          1)自由再散布(Free Distribution):获得源代码的人可自由再将此源代码散布。

           2)源代码(Source Code):程式的可执行档在散布时,必需随附完整源代码或是可让人方便的事后取得源代码。

          3)衍生著作(Derived Works):让人可依此源代码修改后,在依照同一授权条款的情形下再散布。

          4)原创作者程式源代码的完整性(Integrity of The Author’s Source Code):意即修改后的版本,需以不同的版本号码以与原始的程式码做分别,保障原始的程式码完整性。

          5)不得对任何人或团体有差别待遇(No Discrimination Against Persons or Groups):开放源代码软件不得因性别、团体、国家、族群等设定限制,但若是因为法律规定的情形则为例外(如:美国政府限制高加密软件的出口)。

           6)对程式在任何领域内的利用不得有差别待遇(No Discrimination Against Fields of Endeavor):意即不得限制商业使用。

           7)散布授权条款(Distribution of License):若软件再散布,必需以同一条款散布之。

           8)授权条款不得专属于特定产品(License Must Not Be Specific to a Product):若多个程式组合成一套软件,则当某一开放源代码的程式单独散布时,也必需要符合开放源代码的条件。

           9)授权条款不得限制其他软件(License Must Not Restrict Other Software):当某一开放源代码软件与其他非开放源代码软件一起散布时(例如放在同一光碟片),不得限制其他软件的授权条件也要遵照开放源代码的授权。

          10)授权条款必须技术中立(License Must Be Technology-Neutral):意即授权条款不得限制为电子格式才有效,若是纸本的授权条款也应视为有效。


4、Q:如何搭建编程环境?

       A:开发平台推荐Eclipse。VS基本不要想,除非你特别钟爱于传统的vim或其他编程环境并且打算让自己每天敲一堆命令,否则还是用Eclipse吧。它是官方推荐的,目前支持的还算中规中距。而且Linux,windows都能用。
   
            这里拿eoe的技术大牛pcr所使用的开发环境举例,SDK_2.3+Eclipse_3.6.1+ADT 8.0.1。这应该就是目前最普通的开发环境组合了。至于其他的辅助工具,可以在对android有一定了解之后在考虑添加。


Q:什么是NDK?

    A: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)


Q:怎样提高Android应用程序的速度?

      A:首先, 我们要先明白“加快”是有两层意思的,第一层是代码执行所需要的时间,第二层意思是用户需要等待用户界面响应的时间。下面是提高Android应用程序运行速度的几条原则。

           1)不要让UI线程等待
           2)耗时操作不可取
           3)模拟器和真实的设备有不同
           4)通知用户,要注意用户体验。


7、Q:Android运行库有哪些?
   
      A:Android 包括了一个核心库,该核心库提供了JAVA 编程语言核心库的大多数功能。每一个Android 应用程序都在它自己的进程中运行,都拥有一个独立的Dalvik 虚拟机实例。Dalvik 被设计成一个设备可以同时高效地运行多个虚拟系统。Dalvik 虚拟机执行(.dex)的Dalvik 可执行文件,该格式文件针对小内存使用做了优化。同时虚拟机是基于寄存器的,所有的类都经由JAVA 编译器编译,然后通过SDK中的"dx" 工具转化成.dex 格式由虚拟机执行。Dalvik 虚拟机依赖于linux 内核的一些功能,比如线程机制和底层内存管理机制。


8、Q:Android都支持哪些Java特性

    A:
针对于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基本上可以胜任常规的工作。

9、Q:Android最简单播放GIF动画方法是什么?

     A:
GIF动画的原理就是逐帧播放,在Android中提供了AnimationDrawable类可以实现,GIF89A的解码方法在过去的J2ME平台移植到Android平台也能用,其实在Google Android上面开发目前2.2以后的固件支持的方法除了Flash Player外,更好的兼容方法就是使用万能的webkit浏览器了。直接在工程中内嵌一个webView,当然了路径大家可以换成本地的,对于浏览器使用本地资源url为file://开头。

           不过webView的资源消耗也不小,开个webView对象可能占用了至少8MB的RAM吧,保守估计,当然更多的要看插件和以及html的复杂程度所决定的。

10Q:线程在Android应用当中的作用?

        A:1)动态更新UI 如AsyncTask 类,在开发Android应用时必须遵守单线程模型的原则: Android UI操作并不是线程安全的并且这些操作必须在UI线程中执行
              2)SOCKET之间的通信
              3)文件的下载
              4)与服务端之间的交互
              5)复杂数据和逻辑的处理

 

Android高手过招 FAQ

 1、Q:如何成为高手?

      A:成为一名真正的Android高手必须掌握和遵循的一些准则:

          1)学会懒惰
     Don't Reinvent the Wheel(不要重复发明轮子)。
     Inventing the Wheel(发明轮子)。
     Don't Reinvent the Wheel(不要重复发明轮子)。
    “轮子理论”,也即“不要重复发明轮子”,这是西方国家的一句谚语,原话是:Don't Reinvent the Wheel。“不要重复发明轮子 ”意思是企业中任何一项工作实际上都有人做过,我们所需要做的就是找到做过这件事情的人。拿到软件领域中就是指有的项目或功能,别人已经做过,我们需要用的时候,直接拿来用即可,而不要重新制造。

          2)精通Android体系架构、MVC、常见的设计模式、控制反转(IoC)

          3)编写可重用、可扩展、可维护、灵活性高的代码

          4)高效的编写高效的代码

          5)学会至少一门服务器端开发技术
      

2、Q:JNI是什么?


   A:JNI是Java Native Interface的缩写,中文为JAVA本地调用。从Java1.1开始,Java Native Interface(JNI)标准成为java平台的一部分,它允许Java代码和其他语言写的代码进行交互。JNI一开始是为了本地已编译语言,尤其是C和C++而设计的,但是它并不妨碍你使用其他语言,只要调用约定受支持就可以了。

     使用java与本地已编译的代码交互,通常会丧失平台可移植性。但是,有些情况下这样做是可以接受的,甚至是必须的,比如,使用一些旧的库,与硬件、操作系统进行交互,或者为了提高程序的性能。JNI标准至少保证本地代码能工作在任何Java 虚拟机实现下。


3、Q:Android和Linux的区别?

      A:Android是一个专门针对移动设备的软件集,包括一个操作系统,中间件和一些重要的应用程序。Android SDK 提供了在Android平台使用java语言进行android 应用程序开发必须的工具和API接口。Android 系统架构除了Linux2.6内核之外,还提供了丰富的lib和适用于java的运行时环境(很重要的一点是Dalvik虚拟机,类似于JVM)、应用程序框架和核心应用。在此基础之上可以快速开发应用程序。

            linux内核像是核心技术支持,而google 将其商业化于移动设备上。android上开发应用程序和Windows MFC开发有些类似。


4、Q:SDK升级了,如何更新SDK?

       A:
更新SDK是非常棘手的。当一个新的SDK发布,必须是plugin也发布。更新容易出现的错误是两个版本都存在,而且都不正常。最终不得不卸载了它们并且重新安装最新的一个。然后那个最新的SDK工作正常了。建议任何面对SDK或者plugin升级的人都采用相同的过程。简单的卸载老版本,然后安装新版本。不要升级。


5、Q:如何进入Recovery模式
   
       A:每部Android设备进入Recovery模式的方法不同。以Milestone为例:若bootloader为90.78,按住键盘的“X”键,再按电源键开机,看到moto的经典logo即可放开此2键。等待出现一个三角形图标,然后按住音量向上键+轻按拍照键,会出现四个选项。放开按键,可以用方向键选择一个选项。作用分别为重启,应用update.zip,清除所有数据至出厂状态、清除cache。

6、Q:Android bionic移植需要注意的事项
      A:下面通过一个例子来说明移植binic需要做的事情(BIONIC使用的内核头文件从2.6.29 升级到 2.6.31):
          1)修改之前,先要备份 android/bionic

           2)按照下面方法复制linux kernel v2.6.31 头文件:
                复制 include/asm-generic 到 bionic/libc/kernel/original folder
                复制 include/linux 到 bionic/libc/kernel/original folder
                复制 include/mtd 到 bionic/libc/kernel/original folder

          3)运行 tools/update_all.py 脚本,生成新的头文件,方法如下.
               $ cd android/bionic/libc/kernel
               $ tools/update_all.py
               以上的操作将复制新的头文件到 bionic/libc/kernel/common 目录

          4)删除 bionic/libc/kernel/original 目录

          5)复制平台相关的头文件:
              复制 linux v2.6.31 平台相关的 asm 目录到指定的路径,方法如下:
              复制 arch/arm/include/asm 到 android/bionic/libc/kernel/arch-arm/
              复制 arch/x86/include/asm 到 android/bionic/libc/kernel/arch-x86/

           6)从 v2.6.29 bionic/libc/kernel/common/linux 复制一下的头文件到新的 android/bionic/libc/kernel/common/linux 目录:
                android-alarm.h
                android-pmem.h
                android_power.h
                ashmem.h
                binder.h
                msm_adsp.h
                msm_audio.h
                msm_mdp.h
                keychord.h

           7)编译
               $ cd android
               $ make -j4


7、Q:Android源码下vendor目录下文件的作用?
  
       A:指的是某些公司的产品型号,主要是一些针对硬件配置的东西,比如radio 方面的,若是采用TI 的,这里面会有TI提供的一些RIL方面的接口等。


8、Q:编译Android源码和编译Android内核有什么区别?


      A:其实没什么区别,就多了几个android特有的驱动,最重要的是binder


9、Q:如何获取手机和存储卡上的图片?
  
      A:

/**
    * 通过uri获取文件的绝对路径
    * @param uri
    * @return
    */
       protected String getAbsoluteImagePath(Uri uri) 
   {
       // can post image
       String [] proj={MediaStore.Images.Media.DATA};
       Cursor cursor = managedQuery( uri,
                       proj,                 // Which columns to return
                       null,       // WHERE clause; which rows to return (all rows)
                       null,       // WHERE clause selection arguments (none)
                       null);                 // Order-by clause (ascending by name)
       
       int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
       cursor.moveToFirst();
        
       return cursor.getString(column_index);
   }



10、Q:如何使用双缓冲?
         
          A:系统自身已经实现了双缓冲,也就是说为了避免重影,必须连续onDraw两次,或者是对上一次onDraw里面画脏的部分进行修复。
                执行Bitmap.createBitmap函数一般要花销100-300ms的时间,要想提高它的效率,只能祈祷google能把android的代码写得更高效一些了。




  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值