现在的位置: 首页 > 综合 > 正文

Android经典面试题大全[陆续完善中......]

2014年11月05日 ⁄ 综合 ⁄ 共 4266字 ⁄ 字号 评论关闭

1、Android中为什么要经常使用内部类?

内部类特征:

(1)      内部类与父类同生共死;

(2)      内部成员变量之间,可以互相访问;

(3)      内部成员变量可以访问到父类的一些类型;

(4)      父类可以操作内部的一些东西

所以:在Android中常常为了满足自身的需要,而又不需要太复杂的去编写它,所以使用内部类。同时在Android中经常在设置事件和多线程的时候使用匿名内部类。

 

2、版本控制中,SVN与GIT有什么区别?

(1)GIT是分布式的,SVN不是;

这是GIT和其它非分布式的版本控制系统,例如SVN,CVS等,最核心的区别。GIT跟SVN一样有自己的集中式版本库或服务器。但GIT更倾向于被使用于分布式模式,也就是每个开发人员从中心版本库/服务器上chect out代码后会在自己的机器上克隆一个自己的版本库。可以这样说,如果你被困在一个不能连接网络的地方时,仍然能够提交文件,查看历史版本记录,创建项目分支等。当你突然遇到没有网络的环境时,这个将解决你的大麻烦。

(2)GIT把内容按元数据方式存储,而SVN是按文件;

所有的资源控制系统都是把文件的元信息隐藏在一个类似.svn,.cvs等的文件夹里。如果你把.git目录的体积大小跟.svn比较,你会发现它们差距很大。因为,.git目录是处于你的机器上的一个克隆版的版本库,它拥有中心版本库上所有的东西,例如标签,分支,版本记录等。

(3)GIT分支和SVN的分支不同;

分支在SVN中一点不特别,就是版本库中的另外的一个目录。如果你想知道是否合并了一个分支,你需要手工运行像这样的命令svn propget svn:mergeinfo,来确认代码是否被合并。所以,经常会发生有些分支被遗漏的情况。然而,处理GIT的分支却是相当的简单和有趣。你可以从同一个工作目录下快速的在几个分支间切换。你很容易发现未被合并的分支,你能简单而快捷的合并这些文件。

(4)GIT没有一个全局的版本号,而SVN有;

目前为止这是跟SVN相比GIT缺少的最大的一个特征。SVN的版本号实际是任何一个相应时间的源代码快照。

(5)GIT的内容完整性要优于SVN:

GIT的内容存储使用的是SHA-1哈希算法。这能确保代码内容的完整性,确保在遇到磁盘故障和网络问题时降低对版本库的破坏。

 

以上内容是从一些网站论坛找的观点,下面是自身总结:

Git优势(对于SVN的优势):

(1)      速度(用C写的,比SVN快,且分布式提交,快照,分支合并等都在本地执行,最后与主分支合并才联网提交)

(2)      设计简单

(3)      强有力的支持非线性开发(有的程序员建上千个分支),方便管理分支

(4)      能够管理大型项目(如大型项目)

关注两点:速度,和大容量

 

3、什么是Android?

Android是手机操作系统,是Google的产品。

 

4、说说Android有哪些特性?

       Android应用程序基本特性(官方总结)

1、.apk是android应用程序安装格式,.dex是android二进制执行文件格式

2、Android操作系统是基于Linux的多用户操作系统,每一个应用程序都是使用不同的用户

3、默认情况下,一个应用程序一个userid,系统设定,不需要手动去设定,针对这样的应用程序,该用户有权限进行所有操作

4、每一个进程有自己的虚拟机实例,所以每个应用程序相对独立

5、默认情况下,应用程序都有自己的linux进程,当资源不够的时候,系统会决定何时关闭它

6、然而,也有例外:

       |-可以给两个应用程序共享同一个userid,让彼此之间共享资源

       |-应用程序可以请求访问系统资源,比如通讯录,短信等,但需求安装被授权

 

5 、Android的系统架构的理解

1、  Linux kernel

开源,C开发;优化内存管理;有自己的进程和线程机制;驱动模型比较好;支持驱动模型加载。

2、  HAL layer(硬件抽象层:负责核心驱动的沟通)Libraries、android Runtime

使用C、C++类库层;定义接口与驱动打交道;建立一种与硬件的逻辑关系;定制额外的需求。

3、  Application Framework

该层使用JNI调用倒数第二层的核心类库,即调用C++程序

4、  Application

核心的应用程序,该层直接调用上层的java类库,非常方便

 

6、执行eclipse的Run或者debug时候,发生了什么事情?

所有的操作都是有ADT控制

1、  将项目所有的源代码编译成dex二进制文件

2、  打包成APK

3、  选择target设备,发布的地方(模拟器)

4、  上传APK

5、  安装APK

6、  启动主activity

 

7、说说Activity,view ,window之间的关系

       Activity在构造的时候new了一个Window与当前的上下文绑定,window是抽象类,通过phoneWindow来绑定自己定义的View,通过setContentView展示出来

 

8、掌上设备开发的局限性会制约我们的需求通常有哪些?

1、  更低的处理器

2、  有限的内存

3、  有限的存储能力

4、  小屏幕和低分辨率(HVGA、QVGA、WVGA)

5、  数据传输的高成本

6、  数据传输的低速度和高延迟

7、  不稳定的数据连接

8、  有限的电量

 

9、做手机开发经常需要思考哪些问题?

1、  性能(更快和更灵敏)官网有答案

2、  响应能力(拒绝ANR)

|-什么是ANR:应用程序无响应 application no response

|-何时会ANR:点击事件和按键事件5秒钟无响应;接收到消息后10秒钟没有处理返回

|-处理准则:IO操作(File,Sql,Network)和复杂的运算(游戏)最好用异步

3、  无缝:用户使用自然(与第三方程序的交互,前台后台的切换)

4、  安全:对操作权限的考虑

 

10、什么构成了android应用程序?(六大件)

1、  应用程序四大组件

①    Activity

|-Activity是android应用程序的一个界面,可以通过这个界面查看联系人,打电话,玩游戏

|-一个应用程序通常包含多个Activity

|-Activity通过布局管理添加各种View组件

|-通过setContentView(int)方法可以将试图呈现出来

②    Service

|-Service运行在后台,负责处理一些用户看不到,并且会有持续时间的事情。如下载数据。

|-Service不生成UI,是不可见的

|-所有用户实现的Service必须继承系统的Service类,并且在配置文件中进行注册

③    Content Provider

|-数据在android当中是程序私有的

|-Content Provider提供了多个程序间数据交互的机制

|-Content Provider暴露出来一些标准的API来对数据进行操作

④    Broadcast Receiver(广播消息)

|-Broadcast Receiver负责对外部事件做出响应

|-Broadcast Receiver不生成UI,是不可见的

|-所有用户实现的Broadcast Receiver必须继承系统的Broadcast Receiver类,需要在程序中进行注册

|-应用程序可以通过Context.sendBraodcast()将自己的intent广播出去。其他程序通过自身的Broadcast Receivers截获后进行事件处理

 

2、  重要对象Intent(四大组件中,三个组件[Activity/Service/Broadcast Receiver]都要Intent的支持)

|-传递Intent启动一个Activity,startActivity,startActivityForResult

|-传递Intent启动一个Service,startService,bindService

|-通过Intent新加入一个广播,sendBroadcast,sendOrderedBroadcast(),sendStickyBroadcast()

|-执行一个查询,ContentResolve的query()

 

3、  其他:Launcher(系统级应用程序)&Widget(小插件);Notification(提醒功能)

 

11、Manifest如何解析?

1、  应用程序安装的时候,manifest信息会放到一张系统索引表里面

2、  系统启动的时候,PackageManagerService读取Manifest信息

3、  应用程序启动的时候,Launcher进行系统级判断,比如最小的SDK等

4、  四大组件在需求的时候实例化操作

 

12、请说出Android进程5个等级

1、Active Process

     @   正处于Activity Resume()状态

     @   正处于与bound服务交互的状态

     @   正处于服务在前台运行的状态

     @   Service生命周期函数正在被执行

     @   BroadcastReceiver正在执行onReceive()方法

2、Visible Process

     @   当前进程不是焦点进程,Activity不在前段显示,但也没有完全隐蔽,能够看得见,比如弹出的对话框

3、Started Service Process

     @   正在运行的,不在上述两种状态的Service

4、Backgroud Process

     @   不可见状态的Activity,又没有任何相关Service运行的,系统有个后台进程列表,一般情况采取后进先出的原则释放后台进程资源

5、Empty Process

     @   没有运行任何Components的进程,保留在这个进程主要是为了缓存的需要

 

13、什么是Activity?

修正上面部分观点:Activity不是界面,官方定义Activity是Android应用程序提供交互界面的一个重要主件,但本人认为也不太准确,至少不太全面;站在宏观一点的角度去看,Activity更像是个业务类,是承载应用程序界面及业务行为的类,包括UI,Service等等,类似我们耳熟能详的JavaBean。因为通过源码可知道,setContentView底层其实是window去实现的,也就是说,Activity控制Window类去展示View,而Window又是抽象类,所以有个PhoneWindow的类去实现它。

抱歉!评论已关闭.