Android 面试题

1、Android中的ANR

ANR 就是 Application Not Responding ,即应用程序未响应,之所以会造成这种异常是因为Android是在主线程即UI线程中更新界面的,但是如果在UI线程中进行过多的耗时操作就会堵塞主线程从而造成ANR,具体造成ANR的原因有三个:Activity耗时操作超过5s,Broadcast Receiver 超过10s,Service超过15s(自己测试在主线程中要 7 秒,服务中 6 秒才会 ANR)。

2、那Android中是如何避免ANR?

AsyncTask,具体介绍了他的 doInBackground 和 updateProgress 以及 postExecute 三个方法的使用以及参数的类型转换,还分析了 AsyncTask 的缺点,就是它所维护的线程池大小为128,同一时刻只能有5个工作线程和一个缓存线程,如果耗时操作工作量巨大就会导致线程池大小不够用,这就是它的缺点,另外我还介绍了它的解决方式,就是由一个控制线程来处理 AsyncTask 的调用,判断线程池是否已经满了,如果满的话就停止处理。

3、Android应用程序之间是通过哪些方式共享数据的?

File,Sqlite,Content Provider,Service,BroadCast Receiver,Intent,同个Application内部的话还可以通过静态变量共享数据。

4、Content Provider 的生命周期?

ContentProvider通过工具ContentResolver激活,使用者自行管理cursor的生命周期

5、Volley 线程池里面是有5个线程在循环呢?为什么不是6个7个或者8个呢?

可能是因为Volley面向的网络请求是请求量比较小但是请求比较频繁的操作,所以5应该是刚好能够处理得来的,又或许5是一个经过大量的数据实验之后得到的一个相对符合的数量吧!

6、Volley网络请求了哪些数据类型?

String字符串,图片,XML,JSON。

7、说说XML、JSON、GSON有什么样的联系?

XML全称叫做可扩展标记语言,它的结构相对简单,可读性强,但是对于一些比较复杂的数据结构就很难存储,JSON的话刚好弥补了XML的这些缺点,至于GSON的话,是因为Google的一个开源库而得名的,这个开源库可以很方便地将JSON数组转换为对象,这在开发中简化了将JSON的字段转换为属性的步骤。

8、怎么看Android的UI中的动画?

Android的三种动画:Tween,Frame,Property(3.0之后推出的),还说了Activity的进入退出的动画的实现方式,例如使用style定义Activity的淡出淡入效果,还有可以复写Activity的overridePendingTransition方法实现这个效果。

9、推荐书籍

《第一行代码》(第二版)

《Android编程权威指南》(第2版)

《App研发录》

《深入理解Android》(卷1)

《Android开发艺术探索》

《Android Studio实战 快速、高效地构建Android应用》

《设计模式:可复用面向对象软件的基础》

《Effective Java》

《GitHub入门与实践》

10、Framework和Library的区别是什么?

你的程序会调用Library,而Framework会调用你的程序。虽然精辟,但我还是要补充:Framework通常也会提供一个Library,所以,Library是水平的,而Framework是垂直的,此处的“水平”和“垂直”是相对应用系统的层次设计而言的。如果没有层次,其实Framework其实就是Library。Microsoft的Enterprise Library当然就是一个Library,无法代替Framework。

你可能感兴趣的:(Android 面试题)