月薪两万

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

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


2、Q:Android系统架构有哪些?

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


3、Q:什么是开源?

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

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)复杂数据和逻辑的处理

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的代码写得更高效一些了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值