干货:Android开发工程师面试题(三)Android工程师

/ 福建工程学院数学与信息学院Android工程师 / 2017-03-30

Android开发工程师,Android开发工程师面试题,面试题,汇鱼人才


汇鱼网更新了Android面试题(一)、(二),随之而来的便是Android面试题(三),这么好的干货汇鱼人才迫不及待的想要跟小伙伴们分享,还在等什么,快快取走干货!

 

 

1请解释下在单线程模型中MessageHandlerMessage QueueLooper之间的关系。
简单的说,Handler获取当前线程中的looper对象,looper用来从存放MessageMessageQueue中取出Message,再有Handler进行Message的分发和处理

 

2如何启用Service,如何停用Service
(1)第一种是通过调用Context.startService()启动,调用Context.stopService()结束,startService()可以传递参数给Service

(2)第二种方式是通过调用Context.bindService()启动,调用Context.unbindservice()结束,还可以通过ServiceConnection访问Service
Service每一次的开启关闭过程中,只有onStart可被多次调用(通过多次startService调用),其他onCreateonBindonUnbindonDestory在一个生命周期中只能被调用一次。

 

3请解释下Android程序运行时权限与文件系统权限的区别。
      apk程序是运行在虚拟机上的,对应的是Android独特的权限机制,只有体现到文件系统上时才使用linux的权限设置。
android系统有的权限是基于签名的

 

4什么是ANR 如何避免它?
ANRApplication Not Responding,五秒在Android中,活动管理器和窗口管理器这两个系统服务负责监视应用程序的响应。当出现下列情况时,Android就会显示ANR对话框了:对输入事件(如按键、触摸屏事件)的响应超过5。意向接受器(intentReceiver)超过10秒钟仍未执行完毕


Android应用程序完全运行在一个独立的线程中(例如main)。这就意味着,任何在主线程中运行的,需要消耗大量时间的操作都会引发ANR。因为此时,你的应用程序已经没有机会去响应输入事件和意向广播(Intent broadcast)


因此,任何运行在主线程中的方法,都要尽可能的只做少量的工作。特别是活动生命周期中的重要方法如onCreate()onResume()等更应如此。潜在的比较耗时的操作,如访问网络和数据库;或者是开销很大的计算,比如改变位图的大小,需要在一个单独的子线程中完成 (或者是使用异步请求,如数据库操作)。但这并不意味着你的主线程需要进入阻塞状态已等待子线程结束 也不需要调用Therad.wait()或者Thread.sleep()方法。取而代之的是,主线程为子线程提供一个句柄(Handler),让子线程 在即将结束的时候调用它(xing:可以参看Snake的例子,这种方法与以前我们所接触的有所不同)。使用这种方法涉及你的应用程序,能够保证你的程序 对输入保持良好的响应,从而避免因为输入事件超过5秒钟不被处理而产生的ANR。这种实践需要应用到所有显示用户界面的线程,因为他们都面临着同样的超时问题

 

5IntentService有何优点?
IntentService 的好处
(1)Acitivity的进程,当处理Intent的时候,会产生一个对应的Service
(2) Android的进程处理器现在会尽可能的不kill掉你
(3)非常容易使用

 

6什么情况会导致Force Close ?如何避免?能否捕获导致其的异常?
一般像空指针啊,可以看起logcat,然后对应到程序中来解决错误

 

7、有一个一维整型数组int[]data保存的是一张宽为width,高为height的图片像素值信息。

请写一个算法,将该图片所有的白色不透明(0xffffffff)像素点的透明度调整为50%

 

8如何将SQLite数据库(dictionary.db文件)apk文件一起发布?

可以将dictionary.db文件复制到Eclipse Android工程中的res aw目录中。所有在res aw目录中的文件不会被压缩,这样可以直接提取该目录中的文件。可以将dictionary.db文件复制到res aw目录中

 

9简要解释一下activityintent intent filterserviceBroadcaseBroadcaseReceiver
一个activity呈现了一个用户可以操作的可视化用户界面


一个service不包含可见的用户界面,而是在后台无限地运行


可以连接到一个正在运行的服务中,连接后,可以通过服务中暴露出来的借口与其进行通信


一个broadcast receiver是一个接收广播消息并作出回应的componentbroadcast receiver没有界面
intent:content provider在接收到ContentResolver的请求时被激活。


activity, servicebroadcast receiver是被称为intents的异步消息激活的。


一个intent是一个Intent对象,它保存了消息的内容。对于activityservice来说,它指定了请求的操作名称和待操作数据的URI


ntent对象可以显式的指定一个目标component。如果这样的话,android会找到这个component(基于 manifest文件中的声明)并激活它。但如果一个目标不是显式指定的,android必须找到响应intent的最佳component


它是通过将Intent对象和目标的intent filter相比较来完成这一工作的。一个componentintent filter告诉androidcomponent能处理的intentintent filter也是在manifest文件中声明的。

 

10系统上安装了多种浏览器,能否指定某浏览器访问指定页面?请说明原由。
通过直接发送Uri把参数带过去,或者通过manifest里的intentfilter里的data属性

 

11如何将打开res aw目录中的数据库文件?
Android中不能直接打开res aw目录中的数据库文件,而需要在程序第一次启动时将该文件复制到手机内存或SD卡的某个目录中,然后再打开该数据库文件。复制的基本方法是使用getResources().openRawResource方法获得res aw目录中资源的 InputStream对象,然后将该InputStream对象中的数据写入其他的目录中相应文件中。在Android SDK中可以使用SQLiteDatabase.openOrCreateDatabase方法来打开任意目录中的SQLite数据库文件

 

12描述一下android的系统架构
android系统架构分从下往上为linux 内核层、运行库、应用程序框架层、和应用程序层
linuxkernel:负责硬件的驱动程序、网络、电源、系统安全以及内存管理等功能。

librariesandroidruntimelibraries:即c/c++函数库部分,大多数都是开放源代码的函数库,例如webkit,该函数库负责 android网页浏览器的运行,例如标准的c函数库libcopensslsqlite等,当然也包括支持游戏开发2dsgl3dopengles,在多媒体方面有mediaframework框架来支持各种影音和图形文件的播放与显示,例如mpeg4h.264mp3aacamrjpgpng等众多的多媒体文件格式。androidruntime负责解释和执行生成的dalvik格式的字节码。

applicationframework(应用软件架构),java应用程序开发人员主要是使用该层封装好的api进行快速开发。

applications:该层是java的应用程序层,android内置的googlemapse-mail、即时通信工具、浏览器、mp3播放 器等处于该层,java开发人员开发的程序也处于该层,而且和内置的应用程序具有平等的位置,可以调用内置的应用程序,也可以替换内置的应用程序。

上面的四个层次,下层为上层服务,上层需要下层的支持,调用下层的服务,这种严格分层的方式带来的极大的稳定性、灵活性和可扩展性,使得不同层的开发人员可以按照规范专心特定层的开发。

android应用程序使用框架的api并在框架下运行,这就带来了程序开发的高度一致性,另一方面也告诉我们,要想写出优质高效的程序就必须对整个 applicationframework进行非常深入的理解。精通applicationframework,你就可以真正的理解android的设计 和运行机制,也就更能够驾驭整个应用层的开发。

 

汇鱼网将会继续为大家更新更多更全面的Android面试内容,轻轻松松通过面试不是梦!



公众号,微信

汇鱼网海峡创乐汇
汇鱼网海峡创乐汇