Android 面试题经典

2024-05-13

Android 面试题经典(精选10篇)

篇1:Android 面试题经典

选择题(包括多选)

1.下列哪些语句关于内存回收的说明是正确的?

A、程序员必须创建一个线程来释放内存

B、内存回收程序负责释放无用内存

C、内存回收程序允许程序员直接释放内存

D、内存回收程序可以在指定的时间释放内存对象

2.下面异常是属于Runtime Exception 的是

A、ArithmeticException

B、IllegalArgumentException

C、NullPointerException

D、BufferUnderflowException

3.Math.round(-11.5)等于多少

A、11 ,-11

B、11 ,-12

C、12 ,-11

D、12 ,-1

24.下列程序段的输出结果是:

void complicatedexpression_r(){

int x=20, y=30;

boolean b;

b=x>50&&y>60||x>50&&y<-60||x<-50&&y>60||x<-50&&y<-60;

System.out.println(b);

}

A、true

B、false

C、1

D、011.activity

5.对一些资源以及状态的操作保存,最好是保存在生命周期的哪个函数中进行

A、onPause()

B、onCreate()

C、onResume()

D、onStart()

6.Intent传递数据时,下列的数据类型哪些可以被传递

A、Serializable

B、charsequence

C、Parcelable

D、Bundle

7.android 中下列属于Intent的作用的是

A、实现应用程序间的数据共享

B、是一段长的生命周期,没有用户界面的程序,可以保持应用在后台运行,而不会因为切换页面而消失

C、可以实现界面间的切换,可以包含动作和动作数据,连接四大组件的纽带

D、处理一个应用程序整体性的工作

8.下列属于SAX解析xml文件的优点的是

A、将整个文档树在内存中,便于操作,支持删除,修改,重新排列等多种功能

B、不用事先调入整个文档,占用资源少

C、整个文档调入内存,浪费时间和空间

D、不是长久驻留在内存,数据不是持久的,事件过后,若没有保存数据,数据就会

消失

9.在android中使用SQLiteOpenHelper这个辅助类时,可以生成一个数据库,并可以对数据库版本进行管理的方法可以是()

A、getWriteableDatabase()

B、getReadableDatabase()

C、getDatabase()

D、getAbleDatabase()

10.android 关于service生命周期的onCreate()和onStart()说法正确的是

A、当第一次启动的时候先后调用onCreate()和onStart()方法

B、当第一次启动的时候只会调用onCreate()方法

C、如果service已经启动,将先后调用onCreate()和onStart()方法

D、如果service已经启动,只会执行onStart()方法,不在执行onCreate()方法

11.下面是属于GLSurFaceView特性的是

A、管理一个surface,这个surface就是一块特殊的内存,能直接排版到android的视图view上。

B、管理一个EGL display,它能让opengl把内容渲染到上述的surface上。

C、让渲染器在独立的线程里运作,和UI线程分离。

D、可以直接从内存或者DMA等硬件接口取得图像数据

12.下面在AndroidManifest.xml文件中注册BroadcastReceiver方式正确的A、

android:name=“android.provider.action.NewBroad”/>

B、

android:name=“android.provider.action.NewBroad”/>

C、

android:name=“android.provider.action.NewBroad”/>

D、

android:name=“android.provider.action.NewBroad”/>

13.关于ContenValues类说法正确的是

A、他和Hashtable比较类似,也是负责存储一些名值对,但是他存储的名值对当中的名是String类型,而值都是基本类型

B、他和Hashtable比较类似,也是负责存储一些名值对,但是他存储的名值对当中的名是任意类型,而值都是基本类型

C、他和Hashtable比较类似,也是负责存储一些名值对,但是他存储的名值对当中的名,可以为空,而值都是String类型

D、他和Hashtable比较类似,也是负责存储一些名值对,但是他存储的名值对当中的名是String类型,而值也是String类型

14.我们都知道Hanlder是线程与Activity通信的桥梁,如果线程处理不当,你的机器就会变得越慢,那么线程销毁的方法是

A、onDestroy()

B、onClear()

C、onFinish()

D、onStop()

15.下面退出Activity错误的方法是

A、finish()

B、抛异常强制退出

C、System.exit()

D、onStop()

16.下面属于android的动画分类的有

A、Tween

B、Frame

C、Draw

D、Animation

17.下面关于Android dvm的进程和Linux的进程,应用程序的进程说法正确的是

A、DVM指dalivk的虚拟机.每一个Android应用程序都在它自己的进程中运行,不一定拥有一个独立的Dalvik虚拟机实例.而每一个DVM都是在Linux中的一个进程,所以说可以认为是同一个概念.B、DVM指dalivk的虚拟机.每一个Android应用程序都在它自己的进程中运行,不一定拥有一个独立的Dalvik虚拟机实例.而每一个DVM不一定都是在Linux中的一个进程,所以说不是一个概念.C、DVM指dalivk的虚拟机.每一个Android应用程序都在它自己的进程中运行,都拥有一个独立的Dalvik虚拟机实例.而每一个DVM不一定都是在Linux中的一个进程,所以说不是一个概念.D、DVM指dalivk的虚拟机.每一个Android应用程序都在它自己的进程中运行,都拥有一个独立的 Dalvik虚拟机实例.而每一个DVM都是在Linux中的一个进程,所以说可以认为是同一个概念.18.Android项目工程下面的assets目录的作用是什么

A、放置应用到的图片资源。

B、主要放置多媒体等数据文件

C、放置字符串,颜色,数组等常量数据

D、放置一些与UI相应的布局文件,都是xml文件

19.关于res/raw目录说法正确的是

A、这里的文件是原封不动的存储到设备上不会转换为二进制的格式

B、这里的文件是原封不动的存储到设备上会转换为二进制的格式

C、这里的文件最终以二进制的格式存储到指定的包中

D、这里的文件最终不会以二进制的格式存储到指定的包中

20.下列对android NDK的理解正确的是

A、NDK是一系列工具的集合B、NDK 提供了一份稳定、功能有限的 API 头文件声明。

C、使 “Java+C” 的开发方式终于转正,成为官方支持的开发方式

D、NDK 将是 Android平台支持 C 开发的开端

问答题:

1.系统上安装了多种浏览器,能否指定某浏览器访问指定页面?请说明原由。

2.Activity和Task的启动模式有哪些? 每种含义是什么?

3.SQLite支持事务吗? 添加删除如何提高性能?

4.对Intent、Activity、广播、Service等的理解

5、handler机制的原理

篇2:Android 面试题经典

/** Called when the activity is first created. */

@Override

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.main);

findViews;

setListensers();

}

// 定义

private void findViews() {

button_calc = (Button) findViewById(R.id.submit);

field_height = (EditText) findViewById(R.id.height);

field_weight = (EditText) findViewById(R.id.weight);

view_result = (TextView) findViewById(R.id.result);

view_suggest = (TextView) findViewById(R.id.suggest);

}

// Listen for button clicks

private void setListeners() {

calcbutton.setOnClickListener(calcBMI);

}

private Button.OnClickListener calcBMI = new Button.OnClickListener() {

public void onClick(View v) {

DecimalFormat nf = new DecimalFormat(“0.0”);

double height = Double.parseDouble(field_height.getText().toString()) / 100;

double weight = Double.parseDouble(field_weight.getText().toString());

double BMI = weight / (height * height);

// Present result

view_result.setText(getText(R.string.bmi_result) + nf.format(BMI));

// Give health advice

if (BMI > 25) {

view_suggest.setText(R.string.advice_heavy);

} else if (BMI < 20) {

view_suggest.setText(R.string.advice_light);

} else {

view_suggest.setText(R.string.advice_average);

}

}

};

}

总结:

关于项目

在就是你项目经验,一定要突出你遇到什么难点,然后是怎么解决的!把问题引导到你熟悉的领域,或者知识点上,尽量将每个技术点细节凸显出来,

心态:

什么样的面试官都有,去面试的时候要做好一切心理准备,不管是技术还是基础都得扎实。一个人的交谈能力也很重要,总之不是非常标准的普通话, 最起码你说的得让别人听得懂,而且得把面试官讲得非常彻底,这样你获得offer的机会更大,谈工资也有优势~~

篇3:天才的面试题

1.房里有三盏灯, 房外有三个开关, 在房外看不见房内的情况, 但可以任意扳动开关。你只能进门观察一次, 你用什么方法来区分哪个开关控制哪一盏灯?

2.有两根粗细不均匀的香, 燃烧时快时慢, 但每根香烧完的时间确定是一小时。你能用什么方法来确定45分钟的时间?

3.村子里有50个人, 每个人都有一条狗, 在这50条狗中有病狗 (这种病不传染) , 人们要找出病狗。每个人可以观察其他49条狗, 以判断它们是否生病, 但只有自己的狗不能看, 观察后得到的结果不能交流, 也不能通知病狗的主人。主人一旦推算出自己的狗有病时, 就必须在一天内将其枪毙, 而且只有权力枪毙自己的狗, 没有权力打死其他人的狗。第一天大家全看完了, 但枪没响, 第二天枪也没响, 第三天才传来枪响。问:村里共有几条病狗?如何推算出来的?

4.在太平洋的一个小岛上生活着土著人, 他们不愿意被外人打扰。一天, 一位探险家到了岛上, 被土著人捉住, 土著人的首领告诉他:“你临死前可以有个机会留下一句话, 如果这句话是真的, 你将被烧死;如果是假的, 你将被五马分尸。”可怜的探险家说什么才能活下来?

5.一个老师为了测试一下A、B两个学生哪一个反应速度更快, 就把他们带到一个伸手不见五指的黑房子里。老师打开灯说:“这张桌子上有五顶帽子, 两顶是红色的, 三顶是黑色的。现在, 我把灯关掉, 并把帽子的顺序搞乱, 然后, 我们三人每人摸一顶戴在头上。当我把灯打开时, 请你们尽快说出, 自己头上戴的是什么颜色的帽子。”然后老师把灯关掉了, 三个人都摸了一顶帽子戴在头上, 同时, 老师把另外两顶藏起来了。电灯打开后, 那两个同学看到老师头上戴着的是顶红色的帽子, 过了一会儿, A喊道:“我戴的是黑帽子。”请问A是如何推理的?

答案 (仅供参考) :

1.先打开两个开关, 等一段时间再关上其中一个, 马上进里观察。打开的灯对应打开的开关, 用手摸到热的关闭的灯对应刚刚关闭的开关, 凉的灯对应始终没打开的开关。

2.点燃其中一根, 并把另一根两头点燃。第二根烧完恰好过去30分钟, 第一根剩下部分应该能支撑30分钟的燃烧。然后把第一根剩下的部分两头点燃, 15分钟即可燃尽。此过程一共耗时45分钟。

3.若只有一条病狗, 病狗的主人看到其他的狗都没有病, 那么就知道自己的狗有病, 所以第一天晚上就会枪响。因为没有枪响, 就说明病狗数量大于1。若有两条病狗, 病狗的主人会看到有一条病狗, 而第一天没听到枪响, 说明病狗数大于1, 所以病的主人也会知道自己的狗有病, 因而第二天会听枪响, 既然第二天枪也没响, 说明病狗数大于2。依此类推, 如果第三天听到枪响。说明有三条病狗。

4.这是一个悖论问题, 探险家只能描述一种非真非假的状况, 比如:我将被五马分尸。如果土著判定这话是真的, 那么他将被烧死———这样“五马分尸”就成假的了。如果土著判定这话是假的, 那他将被五马分尸的话就变成了真的。

篇4:“天才”面试题

1房里有三盏灯,房外有三个开关,在房外看不见房内的情况。但可以任意扳动开关。你只能进门观察一次,你用什么方法来区分哪个开关控制哪一盏灯?

2有两根粗细不均匀的香,燃烧时快时慢,但每根香烧完的时间确定是一小时。你能用什么方法来确定45分钟的时间?

3村子里有50个人,每个人都有一条狗,在这50条狗中有病狗(这种病不传染),人们要找出病狗。每个人可以观察其他49条狗,以判断它们是否生病,但只有自己的狗不能看,观察后得到的结果不能交流,也不能通知病狗的主人。主人一旦推算出自己的狗有病时,就必须在一天内将其枪毙,而且只有权力枪毙自己的狗,没有权力打死其他人的狗。第一天大家全看完了,但枪没响,第二天枪也没响,第三天才传来枪响。问:村里共有几条病狗?如何推算出来的?

4在太平洋的一个小岛上生活着土著人,他们不愿意被外人打扰。一天,一位探险家到了岛上,被土著人捉住,土著人的首领告诉他:“你临死前可以有个机会留下一句话,如果这句话是真的,你将被烧死;如果是假的。你将被五马分尸。”可怜的探险家说什么才能活下来?

5一个老师为了测试一下A、B两个学生哪一个反应速度更快,就把他们带到一个伸手不见五指的黑房子里。老师打开灯说:“这张桌子上有五顶帽子,两顶是红色的,三顶是黑色的。现在,我把灯关掉,并把帽子的顺序搞乱,然后,我们三人每人摸一顶戴在头上。当我把灯打开时,请你们尽快说出,自己头上戴的是什么颜色的帽子。”然后老师把灯关掉了,三个人都摸了一顶帽子戴在头上,同时,老师把另外两顶藏起来了。电灯打开后,那两个同学看到老师头上戴着的是顶红色的帽子,过了一会儿,A喊道:“我戴的是黑帽子。”请问A是如何推理的?

答案(仅供参考):

1先打开两个开关,等一段时间再关上其中一个,马上进里观察。打开的灯对应打开的开关,因此用手摸到热的灯对应刚刚关闭的开关,凉的对应始终投打开的开关。

2点燃其中一根。并把另一根两头点燃。第二根烧完恰好过去30分钟,第一根剩下部分应该能支撑30分钟的燃烧。然后把第一根剩下的部分两头点燃,15分钟即可燃尽,此过程一共耗时45分钟。

3若只有一条病狗,病狗的主人看到其他的狗都沒有病,那么就知道自己的狗有病,所以第一天晚上就会枪响。因为没有枪响,就说明病狗数量大于1。若有两条病狗,病狗的主人会看到有一条病狗,而第一天没听到枪响,说明病狗数大于1,所以病狗主人也会知道自己的狗有病,因而第二天会听枪响,既然第二天枪也没响,说明病狗数大于2。依此类推,如果第三天听到枪响。说明有三条病狗。

4这是一个悖论问题,探险家只能描述一种非真非假的状况,比如:我将被五马分尸。如果土著判定这话是真的,那么他将被烧死——这样“五马分尸”就成假的了。如果土著判定这话是假的,那他将被五马分尸的话就变成了真的。

5如果A戴的是红帽子,那么B马上就可以猜出自己戴的是黑帽子(因为红帽子只有两顶);而B并没有立刻猜到,所以A马上推断出自己戴的是黑帽子!

汪新才摘自《狗眼看世界》

篇5:android面试题

如何将一个activity设置成窗口的样式。(edited by sodino)

如何退出activity?如何安全退出已调用多个activity的application?

请介绍下android中常用的五种布局。

请介绍下android的数据存储方式。(edited by sodino)

请介绍下contentprovider是如何实现数据共享的。(edited by sodino)

如何启用service,如何停用service。(edited by sodino)

注册广播有几种方式,这些方式有何优缺点?请谈谈android引入广播机制的用意。

请解释下在单线程模型中message、handler、message queue、looper之间的关系。

aidl的全称是什么?如何工作?能处理哪些类型的数据?

请解释下android程序运行时权限与文件系统权限的区别。(edited by sodino)

系统上安装了多种浏览器,能否指定某浏览器访问指定页面?请说明原由。

嵌入式操作系统内存管理有哪几种,各有何特性 ?

页式,段式,段页,用到了mmu,虚拟空间等技术

什么是嵌入式实时操作系统, android 操作系统属于实时操作系统吗?

嵌入式实时操作系统是指当外界事件或数据产生时,能够接受并以足够快的速度予以处理,其处理的结果又能在规定的时间之内来控制生产过程或对处理系统作出快速响应,并控制所有实时任务协调一致运行的嵌入式操作系统。主要用于工业控制、军事设备、航空航天等领域对系统的响应时间有苛刻的要求,这就需要使用实时系统。又可分为软实时和硬实时两种,而android是基于linux内核的,因此属于软实时。

一条最长的短信息约占多少byte?

中文70(包括标点),英文160个字节

android中的动画有哪几类,它们的特点和区别是什么?

两种,一种是tween动画、还有一种是frame动画。tween动画,这种实现方式可以使视图组件移动、放大、缩小以及产生透明度的变化;另一种frame动画,传统的动画方法,通过顺序的播放排列好的图片来实现,类似电影。

handler机制的原理

andriod提供了 handler 和 looper 来满足线程间的通信。handler 先进先出原则。looper类用来管理特定线程内对象之间的消息交换(message exchange)。 1)looper: 一个线程可以产生一个looper对象,由它来管理此线程里的message queue(消息队列)。 2)handler: 你可以构造handler对象来与looper沟通,以便push新消息到message queue里;或者接收looper从message queue取出)所送来的消息。 3) message queue(消息队列):用来存放线程放入的消息。 4)线程:ui thread 通常就是main thread,而android启动程序时会替它建立一个message queue。

说说mvc模式的原理,

它在android中的运用 mvc(model_view_contraller)” 模型_视图_控制器”。 mvc应用程序总是由这三个部分组成。event(事件)导致controller改变model或view,或者同时改变两者。只要 controller改变了models的数据或者属性,所有依赖的view都会自动更新。类似的,只要controller改变了view,view会 从潜在的model中获取数据来刷新自己

(view重绘和内存泄露面试经常问的问题 )

view的刷新:

在需要刷新的地方,使用handle.sendmessage发送信息,然后在handle的getmessage里面执行invaliate或者postinvaliate。

可以调用invalidate()和postinvalidate()这两个方法刷新

gc内存泄露 出现情况:

1).数据库的cursor没有关闭

2).构造adapter时,没有使用缓存contentview 衍生listview的优化问题-----减少创建view的对象,充分使用contentview,可以使用一静态类来优化处理getview的过程/

3).bitmap对象不使用时采用recycle()释放内存

篇6:android面试题

是多么华丽的一种浪费啊。

于是你会有这样一种设想,浏览器Activity,可不可以作为一个单独的Task而存在,不管是来自那个Task的请求,浏览器的Task,都不会归并过去。这样,虽然浏览器Activity本身需要维系的状态更多了,但整体的开销将大大的减少,这种舍小家为大家的行为,还是很值得歌颂的

standard“, ”singleTop“, ”singleTask“, ”singleInstance“。

standard模式, 是默认的也是标准的Task模式,在没有其他因素的影响下,使用此模式的Activity,会构造一个Activity的实例,加入到调用者的Task栈中去,对于使用频度一般开销一般什么都一般的Activity而言,standard模式无疑是最合适的,因为它逻辑简单条理清晰,所以是默认的选择。

而singleTop模式,基本上于standard一致,仅在请求的Activity正好位于栈顶时,有所区别。此时,配置成singleTop的Activity,不再会构造新的实例加入到Task栈中,而是将新来的Intent发送到栈顶Activity中,栈顶的Activity可以通过重载onNewIntent来处理新的Intent(当然,也可以无视...)。这个模式,降低了位于栈顶时的一些重复开销,更避免了一些奇异的行为(想象一下,如果在栈顶连续几个都是同样的Activity,再一级级退出的时候,这是怎么样的用户体验...),很适合一些会有更新的列表Activity展示。一个活生生的实例是,在Android默认提供的应用中,浏览器(Browser)的书签Activity(BrowserBookmarkPage),就用的是singleTop。

singleTask,和singleInstance,则都采取的另辟Task的蹊径。

标志为singleTask的Activity,最多仅有一个实例存在,并且,位于以它为根的Task中。所有对该Activity的请求,都会跳到该Activity的Task中展开进行。singleTask,很象概念中的单件模式,所有的修改都是基于一个实例,这通常用在构造成本很大,但切换成本较小的Activity中。最典型的例子,还是浏览器应用的主Activity(名为Browser...),它是展示当前tab,当前页面内容的窗口。它的构造成本大,但页面的切换还是较快的,于singleTask相配,还是挺天作之合的。

singleInstance显得更为极端一些。在大部分时候singleInstance与singleTask完全一致,唯一的不同在于,singleInstance的Activity,是它所在栈中仅有的一个Activity,如果涉及到的其他Activity,都移交到其他Task中进行。这使得singleInstance的Activity,像一座孤岛,彻底的黑盒,它不关注请求来自何方,也不计较后续由谁执行。在Android默认的各个应用中,很少有这样的Activity,在我个人的工程实践中,曾尝试在有道词典的快速取词Activity中采用过,

是因为我觉得快速取词入口足够方便(从notification中点选进入),并且会在各个场合使用,应该做得完全独立。

大的apk 拆成 很多小的apk

●Activity的 android:taskAffinity=”"属性 姻缘关系

1.配置后 当启动这个activity时就先去找有没有activity的亲和力属性相同 有就加入这个

activity所在的任务中没有就新开任务

2.affinity起作用需要的条件而者具备一个:

1.intent包含FLAG_ACTIVITY_NEW_TASK标记

2.activity元素启用了allowTaskReparenting属性.

43. 在Android中,怎么节省内存的使用,怎么主动回收内存?

回收已经使用的资源,

合理的使用缓存

合理设置变量的作用范围… application 对象

//未来的某一段时间执行

System.gc();

44. 不同工程中的方法是否可以相互调用?

可以,列举aidl访问远程服务的例子.

45. 在Android中是如何实现判断区分电话的状态,去电,来电、未接来电?

Day8 showAddressService.java

46. dvm的进程和Linux的进程, 应用程序的进程是否为同一个概念

Dvm的进程是dalivk虚拟机进程,每个android程序都运行在自己的进程里面,

每个android程序系统都会给他分配一个单独的liunx uid(user id),

每个dvm都是linux里面的一个进程.所以说这两个进程是一个进程.

47. sim卡的EF 文件有何作用

Sim卡相关的东西,没接触过

48. 如何判断是否有SD卡?

配置文件中有sd卡的权限, 通过environment的静态方法,

if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {

49. 嵌入式操作系统内存管理有哪几种, 各有何特性。

页式,段式,段页,等 …

50. 什么是嵌入式实时操作系统, Android 操作系统属于实时操作系统吗?

实时操作系统是指当外界事件或数据产生时,能够接受并以足够快的速度予以处理,其处理的结果又能在规定的时间之内来控制生产过程或对处理系统作出快速响应,并控制所有实时任务协调一致运行的嵌入式操作系统。主要用于工业控制、军事设备、航空航天等领域对系统的响应时间有苛刻的要求,这就需要使用实时系统。又可分为软实时和硬实时两种,而android是基于linux内核的,因此属于软实时。

硬实时. 火星探测车.

软实时.

51. 一条最长的短信息约占多少byte?

中文70(包括标点),英文160,160个字节 这个说法不准确,

要跟手机制式运营商等信息有关.

做实验,看源码

ArrayList msgs = sms.divideMessage(message);

篇7:Android面试题总结

1.简述Activity的生命周期?

1)Activity的生命周期通过7个生命周期方法onCreate(),onRestart(), onStart(), onResume(), onPause(),onStop(),onDestroy()来体现。2)其中6个生命周期方法是成对对应起来的,哪里创建的对象,一般应该在其对应的方法中销毁。

onCreate()--onDestroy()onStart()--onStop()onResume()--onPause()3)当程序启动之后,第一个Activity经过的生命周期方法是:onCreate()→onStart()→ onResume()方法,当第一个Activity A启动第二个Activity B的时候(备注:第二个Activity完全遮盖住第一个Activity,并且这个过程中没有出现点击Home键,或者第一个Activity被杀死等异常情况,并且两个Activity的启动模式是标准模式),这两个Activity经历的生命周期方法是:

A onPause()→ B onCreate()→ B onStart()→ B onResume()→ A onStop()→(此时Activity A已经在回退栈的最低端,Activity B已经在Activity A的上面,在回退栈的最顶端)当通过点击后退键退出Activity B的时候:

(此时Activity B 弹出回退栈)→ B onPause()→ A onRestart()→ A onStart()→ A onResume()→ B onStop()→ B onDestroy()此时B 被销毁

2.简述Service的生命周期?

1).如果在Activity中通过调用startService()方法启动一个Service的话,那么生命周期是:

onCreate()→ onStartCommand()→ 运行中 →(如果自己或者客户端(如Activity)调用了stop Service的方法的话)→ onDestroy()2).如果在Activity中通过调用bindService()方法启动一个Service的话,那么生命周期是:

onCreate()→ onBind()→ 运行中 →(如果有客户端(Activity)调用了unBindService()方法与Service解除绑定时)→ onUnbind()→ onDestroy()3.有几种控件布局的方式?

1)RelativeLayout:相对布局,可以根据相对位置来调整控件的位置。推荐使用相对布局,更利于屏幕的自适应。2)LinearLayout:线性布局,控件之间的水平排列或者垂直排列。但是如果要想构建复杂布局,要进行多层的LinearLayout布局嵌套,但是这样会运行布局载入效率。

3)FrameLayout:帧布局,控件与控件之间处于上下叠加的状态。

备注:还有两个已经不怎么用的布局:TableLayout:表格布局 AbsoluteLayout 绝对布局。

布局实现方式有两种:xml文件静态实现,代码动态实现。

一般xml文件中可以实现布局控制的话,就不建议放在代码中实现布局控制,因为在xml文件中实现布局控制,可以做到布局与代码分离。4.有几种数据存储方式,分别是什么? 1)SQLite数据库存储结构化数据。

2)文件存储:分为内部存储和外部存储(SD卡)两种存储方式。3)SharedPreferences共享参数,键值对形式存储。4)网络存储。

5.IntentService与Service有什么区别? IntentService是Service的子类

1)Service如果要处理异步请求(如耗时操作)的话,需要自己启动一个worker thread,如果启动多个worker thread来处理相关事务的话,各线程之间无法很好的控制。而IntentService可以将多个异步请求的Intent放入队列中,封装了一个开启worker thread的onHandleIntent()方法,来依次处理放入队列中的Intent,只有一个worker thread在运行,同一时刻只有一个Intent被处理,当一个Intent处理完了之后才会处理另外一个Intent。

2)Service可以通过startService()或者bindService()方法来启动,而IntentService则是通过startService()方法来启动。3)Service适合多线程处理异步请求。而IntentService则适合处理需要排队的请求。

6.StartService与bindService之间的区别?

1)StartService启动了Service之后无法与Activity之间进行通信,与现有的Activity分离,即使Activity被杀掉了之后,Service还可以运行,同时通过设置Service的粘性,还可以让Service被杀掉之后,可以自启动。而bindService启动Service之后,与绑定的Activity之间有关系,可以依据Server/Client模式来进行通信(binder客户端主动请求模式,或者通过信使),但是无法设置Serrvice的粘性。2)StartService启动的Service,Activity中可以调用stopService()方法来结束一个Service,或者通过Service自己调用stopSelf()方法来结束Service。而bindService只能通过Activity()来调用unbindService()方法来结束Service,Service会调用onUnBind()方法,以及onDestroy()方法。

7.ArrayAdapter BaseAdapter CursorAdapter的区别?

ArrayAdpter CursorAdapter都是BaseAdapter的子类。都是用来填充那些含有item的控件。

1)主要区别是数据来源不同。ArrayAdapter数据来源是Object数组,CursorAdapter数据来源是数据库的Cursor,而BaseAdapter适合创建复杂自定义的item内容,通过继承BaseAdapter类,重写相关方法来实现。

8.Handler与Looper之间的关系? 1)Handler和Looper的关系就好比,坐地铁过安检时候:每一个人可以理解为一个Handler,一个人的一个或者多个东西看做Message而循环滚动的检查台装置可以看做是Looper,而要检查的东西排成队列可以理解为MessageQueue消息队列。

2)Looper是Handler和MessageQuene之间的桥梁,Looper将Handler发送过的消息放入MessageQueue,同时Looper也将MessageQueue中的Message发送给Handler来处理。

9.res文件夹与assets文件夹有什么区别? 1)res文件夹中的资源在会在R.java文件中生成ID,代码中可以直接通过R.id的形式来访问。而assets文件夹中的资源不会在R.java文件中生成ID,需要通过AssetsManager通过IO流的方式来访问。

2)res文件夹中的文件会被压缩,而assets文件中的文件不会被压缩。

3)Res不能自定义目录名,不支持多层目录。而assets支持自定义目录名,支持多层目录。

10.广播接收器有几种注册方式,分别是什么?

篇8:微软的面试题

一个求职者应聘微软的部门经理,面试官抛出一道考题:一天晚上,结伴同行的4个人要由一座小桥的一边到达另一边,过桥时必须用到手电筒,但手电筒只有一支,而小桥每次最多只可以通过两人。4个人的过桥时间分别为1分钟、2分钟、5分钟、10分钟。要让所有人安全通过小桥。最少需要多长时间?

听完,求职者立即埋头计算。来微软之前,他曾经在别的公司做过项目经理,他想,这完全是一个考查优化的问题。

聪明的人马上就能想到这样的方法:先让1、2过去,1回来,5、10再过去,2回来,1、2再过去,总共17分钟。

可是,求职者算来算去,总比标准答案的时间多。看他左右为难的样子,面试官问要不要提示,他立马说不,又埋头做了5分钟,结果还是没做出来。

面试官点评说:“其实你解题的思路很好,可惜你没有理解清楚我的问题,最关键的是,你没有问我手电筒能照多远?如果将手电筒放在桥中间,朝左朝右各能照到桥的一半,那就不需要来回在桥上走了。

最后,面试官重申:出这样一道面试题,当然不是为了考求职者的数学水平,而是有没有理清问题细节的能力。这对一个项目经理来说,是非常重要的素质。

篇9:android面试题摘要

mvc是model,view,controller的缩写,mvc包含三个部分:

模型(model)对象:是应用程序的主体部分,所有的业务逻辑都应该写在该层。

视图(view)对象:是应用程序中负责生成用户界面的部分。也是在整个mvc架构中用户唯一可以看到的一层,接收用户的输入,显示处理结果。

控制器(control)对象:是根据用户的输入,控制用户界面数据显示及更新model对象状态的部分,控制器更重要的一种导航功能,想用用户出发的相

关事件,交给model处理。

2、android鼓励弱耦合和组件的重用,在android中mvc的具体体现如下:

视图层(view):一般采用xml文件进行界面的描述,使用的时候可以非常方便的引入,当然,如何你对android了解的比较的多了话,就一定 可以想到在 android中也可以使用javascript+html等的方式作为view层,当然这里需要进行java和javascript之间的通 信,幸运的是,android提供了它们之间非常方便的通信实现。

控制层(controller):android的控制层的重 任通常落在了众多的acitvity的肩上,这句话也就暗含了不要在acitivity中写代码,要通过activity交割model业务 逻辑层处理, 这样做的另外一个原因是android中的acitivity的响应时间是5s,如果耗时的操作放在这里,程序就很容易被回收掉。

模型层(model):对数据库的操作、对网络等的操作都应该在model里面处理,当然对业务计算等操作也是必须放在的该层的。

3、Activity的生命周期

和其他手机平台 的应用 程序 一样,Android的应用程序 的生命周期是被统一掌控 的,也就是说我们写的应用程序命运掌握在别人(系统)的手里,我们不能改变它,只能学习并适应它。简单地说一下为什么是这样:我们手机在运行 一个应用程序的时候,有可能打进来电话

发进来短信 ,或者没有电了,这时候程序都会被中断,优先去服务电话的基本功能 ,另外系统也不允许你占用太多资源 ,至少要保证电话功能吧,所以资源不足的时候也就有可能被干掉。

言归正传,Activity的基本生命周期如下代码 所示:

Java代码

public

class MyActivity extends Activity {

protected

void onCreate(Bundle savedInstanceState);

protected

void onStart;

protected

void onResume();

protected

void onPause();

protected

void onStop();

protected

void onDestroy();

}

你自己写的Activity会按需要 重载这些方法,onCreate是免不了的,在一个Activity正常启动的过程中,他们被调用的顺序是 onCreate ->onStart ->onResume, 在Activity被干掉的时候顺序是onPause ->onStop ->onDestroy ,这样就是一个完整的生命周期,但是有人问了 ,程序正运行着呢来电话了,这个程序咋办?中止了呗,如果中止的时候新出的一个Activity是全屏的那么:onPause->onStop ,恢复的时候onStart->onResume ,如果打断 这个应用程序的是一个Theme为Translucent 或者Dialog 的Activity那么只是onPause ,恢复 的时候onResume 。

详细介绍一下这几个方法中系统在做什么以及我们应该做什么:

onCreate: 在这里创建界面 ,做一些数据 的初始化工作

onStart: 到这一步变成用户可见不可交互 的

onResume: 变成和用户可交互 的,(在activity 栈系统通过栈的方式管理这些个Activity的最上面,运行完弹出栈,则回到上一个Activity)

onPause: 到这一步是可见但不可交互 的,系统会停止动画 等消耗CPU 的事情从上文的描述已经知道,应该在这里保存你的一些数据,因为这个时候你的程序的优先级降低,有可能被系统收回。在这里保存的数据,应该在

onResume里读出来,注意:这个方法里做的事情时间要短,因为下一个activity不会等到这个方法完成才启动

onstop: 变得不可见 ,被下一个activity覆盖了

篇10:Android面试题附答案

1.java.io包中定义了多个流类型来实现输入和输出功能,可以从不同的角度对其进行分 类,按功能分为:(c),如果为读取的内容进行处理后再输出,需要使用下列哪种流?(g)

A、输入流和输出流 B、字节流和字符流 C、节点流和处理流

D、File stream E、Pipe stream F、Random stream G、Filter stream

2.下列代码的执行结果是:(b)

public class Test3{

public static void main(String args[]){

System.out.print(100%3);

System.out.print(“,”);

System.out.println(100%3.0);

}

}

A、1,1

B、1,1.0

C、1.0,1

D、1.0,1.0

3.在继承中,关于构造方法的说明,下列说法错误的是(d)

A、子类无条件的继承父类的无参构造方法,

B、子类可以引用父类中的有参构造方法,使用super关键字,

C、如果子类没有构造方法,则父类无参构造方法作为自已的构造方法,

D、如果子类有无参构造方法,而父类的无参构造方法则被覆盖。

4.以下程序的运行结果为( b)

public class IfTest{

public static void main(String args[]){

int x=3;

int y=1;

if(x==y)

System.out.println(“Not equal”);

else

System.out.println(“Equal”);

}

}

A、Not equal B、Equal C、无输出 D、编译出错

5.Java语言中字符串“学Java”所占的内存空间是(a)

A. 6个字节

B. 7个字节

C. 10个字节

D. 11个字节

6.关于下列程序段的输出结果,说法正确的是:(d )

public class MyClass{

static int i;

public static void main(String argv[]){

System.out.println(i);

}

}

A、有错误,变量i没有初始化。

B、null

C、1

D、0

7.下列哪些语句关于内存回收的说明是正确的? (b )

A、 程序员必须创建一个线程来释放内存

B、 内存回收程序负责释放无用内存

C、 内存回收程序允许程序员直接释放内存

D、 内存回收程序可以在指定的时间释放内存对象

8.下面异常是属于Runtime Exception 的是(abcd)(多选)

A、ArithmeticException

B、IllegalArgumentException

C、NullPointerException

D、BufferUnderflowException

9. Math.round(11.5)等于多少(). Math.round(-11.5)等于多少(c). c

A、11 ,-11 B、11 ,-12 C、12 ,-11 D、12 ,-12

10.下列程序段的输出结果是:(b )

void complicatedexpression_r(){

int x=20, y=30;

boolean b;

b=x>50&&y>60||x>50&&y<-60||x<-50&&y>60||x<-50&&y<-60;

System.out.println(b);

}

A、true B、false C、1 D、0

11.activity对一些资源以及状态的操作保存,最好是保存在生命周期的哪个函数中进行(d)

A、onPause() B、onCreate() C、 onResume() D、onStart()

12.Intent传递数据时,下列的数据类型哪些可以被传递(abcd)(多选)

A、Serializable B、charsequence C、Parcelable D、Bundle

13.android 中下列属于Intent的作用的是(c)

A、实现应用程序间的数据共享

B、是一段长的生命周期,没有用户界面的程序,可以保持应用在后台运行,而不会因为切换页面而消失

C、可以实现界面间的切换,可以包含动作和动作数据,连接四大组件的纽带

D、处理一个应用程序整体性的工作

14.下列属于SAX解析xml文件的优点的是(b)

A、将整个文档树在内存中,便于操作,支持删除,修改,重新排列等多种功能

B、不用事先调入整个文档,占用资源少

C、整个文档调入内存,浪费时间和空间

D、不是长久驻留在内存,数据不是持久的,事件过后,若没有保存数据,数据就会

消失

15.下面的对自定style的方式正确的是(a)

A、

B、

C、

fill_parent

D、

16.在android中使用Menu时可能需要重写的方法有(ac)。(多选)

A、onCreateOptionsMenu()

B、onCreateMenu()

C、onOptionsItemSelected()

D、onItemSelected()

17.在SQL Server Management Studio 中运行下列T-SQL语句,其输出值(c)。

SELECT @@IDENTITY

A、 可能为0.1

B、 可能为3

C、 不可能为-100

D、 肯定为0

18.在SQL Server 中运行如下T-SQL语句,假定SALES表中有多行数据,执行查询之 后的结果是(d)。

BEGIN TRANSACTION A

Update SALES Set qty=30 WHERE qty<30

BEGIN TRANSACTION B

Update SALES Set qty=40 WHERE qty<40

Update SALES Set qty=50 WHERE qty<50

Update SALES Set qty=60 WHERE qty<60

COMMIT TRANSACTION B

COMMIT TRANSACTION A

A、SALES表中qty列最小值大于等于30

B、SALES表中qty列最小值大于等于40

C、SALES表中qty列的数据全部为50

D、SALES表中qty列最小值大于等于60

19.在android中使用SQLiteOpenHelper这个辅助类时,可以生成一个数据库,并可以对数 据库版本进行管理的方法可以是(ab)

A、getWriteableDatabase()

B、getReadableDatabase()

C、getDatabase()

D、getAbleDatabase()

20. android 关于service生命周期的onCreate()和onStart()说法正确的是(ad)(多选题)

A、当第一次启动的时候先后调用onCreate()和onStart()方法

B、当第一次启动的时候只会调用onCreate()方法

C、如果service已经启动,将先后调用onCreate()和onStart()方法

D、如果service已经启动,只会执行onStart()方法,不在执行onCreate()方法

21.下面是属于GLSurFaceView特性的是(abc)(多选)

A、管理一个surface,这个surface就是一块特殊的内存,能直接排版到android的视图

view上。

B、管理一个EGL display,它能让opengl把内容渲染到上述的surface上。

C、让渲染器在独立的线程里运作,和UI线程分离。

D、可以直接从内存或者DMA等硬件接口取得图像数据

22.下面在AndroidManifest.xml文件中注册BroadcastReceiver方式正确的是(a)

A、

android:name=”android.provider.action.NewBroad“/>

B、

android:name=”android.provider.action.NewBroad”/>

C、

android:name=”android.provider.action.NewBroad“/>

D、

android:name=”android.provider.action.NewBroad”/>

23.关于ContenValues类说法正确的是(a)

A、他和Hashtable比较类似,也是负责存储一些名值对,但是他存储的名值对当中的

名是String类型,而值都是基本类型

B、他和Hashtable比较类似,也是负责存储一些名值对,但是他存储的名值对当中的

名是任意类型,而值都是基本类型

C、他和Hashtable比较类似,也是负责存储一些名值对,但是他存储的名值对当中的

名,可以为空,而值都是String类型

D、他和Hashtable比较类似,也是负责存储一些名值对,但是他存储的名值对当中

的名是String类型,而值也是String类型

24.我们都知道Hanlder是线程与Activity通信的桥梁,如果线程处理不当,你的机器

就会变得越慢,那么线程销毁的方法是(a)

A、onDestroy()

B、onClear()

C、onFinish()

D、onStop()

25.下面退出Activity错误的方法是(c)

A、finish()

B、抛异常强制退出

C、System.exit()

D、onStop()

26.下面属于android的动画分类的有(ab)(多项)

A、Tween B、Frame C、Draw D、Animation

27.下面关于Android dvm的进程和Linux的进程,应用程序的进程说法正确的是(d)

A、DVM指dalivk的虚拟机.每一个Android应用程序都在它自己的进程中运行,不一定拥有一个独立

的Dalvik虚拟机实例.而每一个DVM都是在Linux 中的一个进程,所以说可以认为是同一个概念.

B、DVM指dalivk的虚拟机.每一个Android应用程序都在它自己的进程中运行,不一定拥有一个独立

的Dalvik虚拟机实例.而每一个DVM不一定都是在Linux 中的一个进程,所以说不是一个概念.

C、DVM指dalivk的虚拟机.每一个Android应用程序都在它自己的进程中运行,都拥有一个独立的

Dalvik虚拟机实例.而每一个DVM不一定都是在Linux 中的一个进程,所以说不是一个概念.

D、DVM指dalivk的虚拟机.每一个Android应用程序都在它自己的进程中运行,都拥有一个独立的

Dalvik虚拟机实例.而每一个DVM都是在Linux 中的一个进程,所以说可以认为是同一个概念.

28.Android项目工程下面的assets目录的作用是什么b

A、放置应用到的图片资源。

B、主要放置多媒体等数据文件

C、放置字符串,颜色,数组等常量数据

D、放置一些与UI相应的布局文件,都是xml文件

29..关于res/raw目录说法正确的是(a

A、 这里的文件是原封不动的存储到设备上不会转换为二进制的格式

B、 这里的文件是原封不动的存储到设备上会转换为二进制的格式

C、 这里的文件最终以二进制的格式存储到指定的包中

D、 这里的文件最终不会以二进制的格式存储到指定的包中

30.下列对android NDK的理解正确的是(abcd )

A、 NDK是一系列工具的集合

B、 NDK 提供了一份稳定、功能有限的 API 头文件声明。

C、 使 “Java+C” 的开发方式终于转正,成为官方支持的开发方式

D、 NDK 将是 Android平台支持 C 开发的开端

二.填空题(每题2分,共20分)

1.我们用___int____来定义一个整数,用___char____来定义一个字符类型,称为原始数据类型。

2.android中常用的四个布局是framlayout,linenarlayout,relativelayout和tablelayout。

3.android 的四大组件是activiey,service,broadcast和contentprovide。

4.java.io包中的objectinputstream和objectoutputstream类主要用于对对象(Object)的读写。

5.android 中service的实现方法是:startservice和bindservice。

6.activity一般会重载7个方法用来维护其生命周期,除了onCreate(),onStart(),onDestory() 外还有onrestart,onresume,onpause,onstop。

7.android的数据存储的方式sharedpreference,文件,SQlite,contentprovider,网络。

8.当启动一个Activity并且新的Activity执行完后需要返回到启动它的Activity来执行

的回调函数是startActivityResult()。

9.请使用命令行的方式创建一个名字为myAvd,sdk版本为2.2,sd卡是在d盘的根目录下,

名字为scard.img, 并指定屏幕大小HVGA.____________________________________。

10.程序运行的结果是:_____good and gbc__________。

public class Example{

String str=new String(“good”);

char[]ch={‘a’,b’,c’};

public static void main(String args[]){

Example ex=new Example();

ex.change(ex.str,ex.ch);

System.out.print(ex.str+” and “);

Sytem.out.print(ex.ch);

}

public void change(String str,char ch[]){

str=”test ok”;

ch[0]=’g;

}

}

三 简答编程题(共35分)

1.在android中,请简述jni的调用过程。(8分)

1)安装和下载Cygwin,下载 Android NDK

2)在ndk项目中JNI接口的设计

3)使用C/C++实现本地方法

4)JNI生成动态链接库.so文件

5)将动态链接库复制到java工程,在java工程中调用,运行java工程即可

2.简述Android应用程序结构是哪些?(7分)

Android应用程序结构是:

Linux Kernel(Linux内核)、Libraries(系统运行库或者是c/c++核心库)、Application

Framework(开发框架包)、Applications (核心应用程序)

3. 请继承SQLiteOpenHelper实现:(10分)

1).创建一个版本为1的“diaryOpenHelper.db”的数据库,

2).同时创建一个 “diary” 表(包含一个_id主键并自增长,topic字符型100

长度, content字符型1000长度)

3).在数据库版本变化时请删除diary表,并重新创建出diary表。

public class DBHelper extends SQLiteOpenHelper {

public final static String DATABASENAME = “diaryOpenHelper.db”;

public final static int DATABASEVERSION = 1;

//创建数据库

public DBHelper(Context context,String name,CursorFactory factory,int version)

{

super(context, name, factory, version);

}

//创建表等机构性文件

public void onCreate(SQLiteDatabase db)

{

String sql =”create table diary”+

“(“+

“_id integer primary key autoincrement,”+

“topic varchar(100),”+

“content varchar(1000)”+

“)”;

db.execSQL(sql);

}

//若数据库版本有更新,则调用此方法

public void onUpgrade(SQLiteDatabase db,int oldVersion,int newVersion)

{

String sql = “drop table if exists diary”;

db.execSQL(sql);

this.onCreate(db);

}

}

4.页面上现有ProgressBar控件progressBar,请用书写线程以10秒的的时间完成其进度

显示工作。(10分)

答案

public class ProgressBarStu extends Activity {

private ProgressBar progressBar = null;

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.progressbar);

//从这到下是关键

progressBar = (ProgressBar)findViewById(R.id.progressBar);

Thread thread = new Thread(new Runnable() {

@Override

public void run() {

int progressBarMax = progressBar.getMax();

try {

while(progressBarMax!=progressBar.getProgress())

{

int stepProgress = progressBarMax/10;

int currentprogress = progressBar.getProgress();

progressBar.setProgress(currentprogress+stepProgress);

Thread.sleep(1000);

}

} catch (InterruptedException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

});

thread.start();

//关键结束

}

}

答案:

一、选择题

1 2 3 4 5 6 7 8 9 10

CG B D B A D B ABCD C B

11 12 13 14 15 16 17 18 19 20

D ABCD C B A AC C D AB AD

21 22 23 24 25 26 27 28 29 30

ABC A A A C AB D B A ABCD

二、填空题

1. int char

2.FrameLayout,LilnearLayout,RelativeLayout,TableLayout

3.Activity,Broadcast,Service,ContentProvide

4.ObjectInputStream ObjectOutputSteam

5.startService ,bindService

6.onRestart(),onResume(),onPause(),onStop()

7.SharedPreferences存储,文件存储,SQLite存储,ContentProvider,网络存储

8.startActivityResult()

9.adnroid create acd -n myAvd -t 8 -s HVDA – C d:card.img

本文来自 360文秘网(www.360wenmi.com),转载请保留网址和出处

【Android 面试题经典】相关文章:

android面试题目05-03

Android终端05-15

Android测试05-18

Android手机05-29

android安全机制05-25

android程序报告05-26

android项目心得05-16

android应用学习总结04-09

android移动开发答案06-06

Android客户端06-06

上一篇:电气工程及其自动化专业英语介绍下一篇:办公设备安排方案