《Android面试题.pdf》由会员分享,可在线阅读,更多相关《Android面试题.pdf(3页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、AndroidAndroid 面试题面试题1.请描述下 Activity 的生命周期。2.如果后台的 Activity 由于某原因被系统回收了,如何在被系统回收之前保存当前状态?3.如何将一个 Activity 设置成窗口的样式。(Edited by Sodino)4.如何退出 Activity?如何安全退出已调用多个Activity 的 Application?5.请介绍下 Android 中常用的五种布局。6.请介绍下 Android 的数据存储方式。(Edited by Sodino)7.请介绍下 ContentProvider 是如何实现数据共享的。(Edited by Sodino)
2、8.如何启用 Service,如何停用 Service。(Edited by Sodino)9.注册广播有几种方式,这些方式有何优缺点?请谈谈 Android 引入广播机制的用意。10.请解释下在单线程模型中Message、Handler、Message Queue、Looper 之间的关系。11.AIDL 的全称是什么?如何工作?能处理哪些类型的数据?12.请解释下 Android 程序运行时权限与文件系统权限的区别。(Edited by Sodino)13.系统上安装了多种浏览器,能否指定某浏览器访问指定页面?请说明原由。14.有一个一维整型数组 intdata 保存的是一张宽为 widt
3、h,高为 height 的图片像素值信息。请写一个算法,将该图片所有的白色不透明(0 xffffffff)像素点的透明度调整为 50%。15.你如何评价 Android 系统?优缺点。1、什么是 ANR 如何避免它?答:ANR:Application Not Responding,五秒在 Android 中,活动管理器和窗口管理器这两个系统服务负责监视应用程序的响应。当出现下列情况时,Android 就会显示 ANR 对话框了:对输入事件(如按键、触摸屏事件)的响应超过 5 秒意向接受器(intentReceiver)超过 10 秒钟仍未执行完毕Android 应用程序完全运行在一个独立的线程
4、中(例如 main)。这就意味着,任何在主线程中运行的,需要消耗大量时间的操作都会引发 ANR。因为此时,你的应用程序已经没有机会去响应输入事件和意向广播(Intent broadcast)。因此,任何运行在主线程中的方法,都要尽可能的只做少量的工作。特别是活动生命周期中的重要方法如 onCreate()和 onResume()等更应如此。潜在的比较耗时的操作,如访问网络和数据库;或者是开销很大的计算,比如改变位图的大小,需要在一个单独的子线程中完成(或者是使用异步请求,如数据库操作)。但这并不意味着你的主线程需要进入阻塞状态已等待子线程结束-也不需要调用 Therad.wait()或者 Th
5、read.sleep()方法。取而代之的是,主线程为子线程提供一个句柄(Handler),让子线程在即将结束的时候调用它(xing:可以参看Snake 的例子,这种方法与以前我们所接触的有所不同)。使用这种方法涉及你的应用程序,能够保证你的程序对输入保持良好的响应,从而避免因为输入事件超过5 秒钟不被处理而产生的 ANR。这种实践需要应用到所有显示用户界面的线程,因为他们都面临着同样的超时问题。2、什么情况会导致 Force Close?如何避免?能否捕获导致其的异常?答:一般像空指针啊,可以看起logcat,然后对应到程序中 来解决错误3、Android 本身的 api 并未声明会抛出异常,
6、则其在运行时有无可能抛出runtime 异常,你遇到过吗?诺有的话会导致什么问题?如何解决?4、简要解释一下activity、intent、intent filter、service、Broadcase、BroadcaseReceiver答:一个 activity 呈现了一个用户可以操作的可视化用户界面一个 service 不包含可见的用户界面,而是在后台无限地运行可以连接到一个正在运行的服务中,连接后,可以通过服务中暴露出来的借口与其进行通信一个 broadcast receiver是一个接收广播消息并作出回应的component,broadcast receiver没有界面intent:c
7、ontent provider 在接收到 ContentResolver的请求时被激活。activity,service和 broadcast receiver是被称为 intents 的异步消息激活的。一个 intent 是一个 Intent 对象,它保存了消息的内容。对于 activity 和 service 来说,它指定了请求的操作名称和待操作数据的URIIntent 对象可以显式的指定一个目标component。如果这样的话,android 会找到这个component(基于 manifest 文件中的声明)并激活它。但如果一个目标不是显式指定的,android 必须找到响应 inte
8、nt 的最佳 component。它是通过将 Intent 对象和目标的 intent filter 相比较来完成这一工作的。一个 component的 intent filter 告诉 android 该 component 能处理的 intent。intent filter 也是在 manifest文件中声明的。5、IntentService 有何优点?答:IntentService 的好处*Acitivity 的进程,当处理 Intent 的时候,会产生一个对应的Service*Android 的进程处理器现在会尽可能的不kill 掉你*非常容易使用6、横竖屏切换时候 activity
9、的生命周期?1、不设置Activity 的 android:configChanges 时,切屏会重新调用各个生命周期,切横屏时会执行一次,切竖屏时会执行两次2、设置 Activity 的 android:configChanges=orientation时,切屏还是会重新调用各个生命周期,切横、竖屏时只会执行一次3、设置 Activity 的 android:configChanges=orientation|keyboardHidden时,切屏不会重新调用各个生命周期,只会执行onConfigurationChanged 方法1.1.如何将如何将 SQLiteSQLite 数据库数据库(d
10、ictionary.db(dictionary.db 文件文件)与与 apkapk 文件一起发布文件一起发布?解答:可以将 dictionary.db文件复制到 Eclipse Android工程中的 res aw目录中。所有在 resaw 目录中的文件不会被压缩,这样可以直接提取该目录中的文件。可以将dictionary.db文件复制到 res aw 目录中2.2.如何将打开如何将打开 res awres aw 目录中的数据库文件目录中的数据库文件?解答:在 Android 中不能直接打开 res aw 目录中的数据库文件,而需要在程序第一次启动时将该文件复制到手机内存或SD 卡的某个目录中
11、,然后再打开该数据库文件。复制的基本方法是使用getResources().openRawResource方法获得res aw目录中资源的 InputStream对象,然后将该InputStream 对象中的数据写入其他的目录中相应文件中。在Android SDK中可以使用 SQLiteDatabase.openOrCreateDatabase 方法来打开任意目录中的 SQLite 数据库文件。3.Android3.Android 引入广播机制的用意引入广播机制的用意?答:a:从 MVC 的角度考虑(应用程序内)其实回答这个问题的时候还可以这样问,android 为什么要有那 4 大组件,现在的移动开发模型基本上也是照搬的 web 那一套 MVC 架构,只不过是改了点嫁妆而已。android 的四大组件本质上就是为了实现移动或者说嵌入式设备上的MVC 架构,它们之间有时候是一种相互依存的关系,有时候又是一种补充关系,引入广播机制可以方便几大组件的信息和数据交互。b:程序间互通消息(例如在自己的应用程序内监听系统来电)c:效率上(参考 UDP 的广播协议在局域网的方便性)d:设计模式上(反转控制的一种应用,类似监听者模式)
限制150内