企业面试题(30题)--android 联系客服

发布时间 : 星期日 文章企业面试题(30题)--android更新完毕开始阅读511074340a4e767f5acfa1c7aa00b52acfc79cd1

控制器( Control )对象:是根据用户的输入,控制用户界面数据显示及更新Model 对象状态的部分,控制器更重要的一种导航功能,想用用户出发的相关事件,交给 M 哦得了处理。

Android 鼓励弱耦合和组件的重用,在 Android 中 MVC 的具体体现如下

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

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

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

19.View如何进行刷新?

答:在一个开启的线程中调用handler对象的sendMessage方法发送信息,在UI线程中调用handler对象的回调方法handleMessage进行处理,在回调方法中执行invalidate或者postInvalidate. 20.DIP、DPI分别是什么

答:dip(device independent pixels)设备独立像素, 与设备屏幕有关。dpi:屏幕像素密度。

android最早是没有考虑到这么多屏幕分辨率的。最早的机器是g1,他的分辨率是480*320。但是,由于android是开放的平台,各种各样分辨率的设备都可以运行。为了兼容这些平台,android从1.6开始,加入了设备独立像素,dip或者dp。标准屏幕480*320上,px与dip是1比1的。分辨率高的,比如800*480,就要按比例兑换成480*320。

开发者在开发的时候,ui设计时最好用dp,系统会自动按比例计算为px,从而适配视图。 dpi是屏幕像素密度。就是1英寸上像素点的个数。对于屏幕来说,dpi越大,屏幕的精细度越高,屏幕看起来就越清楚。比如iphone4的视网膜级的屏幕肯定比iphone 3gs的屏幕像素密度高的多。 对于开发者来说,这个不是很重要。

困难类题目

21.请解释下在单线程模型中Message,Handler,Message Queue,Looper之间的关系。

答:拿主线程来说,主线程启动时会调用Looper.prepare()方法,会初始化一个Looper,放

入Threadlocal中,接着调用Looper.loop()不断遍历Message Queue,

Handler的创建依赖与当前线程中的Looper,如果当前线程没有Looper则必须调用Looper.prepare()。Handler , sendMessage到MessageQueue,Looper不断 从MessageQueue中取出消息,回调handleMessage方法。

22. 内存溢出和内存泄漏有什么区别?何时会产生内存泄漏?内存优化有哪些方法?

答:内存溢出通俗理解就是软件(应用)运行需要的内存,超出了它可用的最大内存。

内存泄漏就是我们对某一内存空间的使用,使用完成后没有释放。

内存优化:Android中容易内存溢出的部分,就是图片的加载,我们可以使用图片的压缩加上使用LruCache缓存的目的来控制图片所能够使用的内存。 还有对于比较耗资源的对象及时的关闭

23.AsyncTask使用在哪些场景?它的缺陷是什么?如何解决?

答:AsyncTask 运用的场景就是我们需要进行一些耗时的操作,耗时操作完成后更新主线程,

或者在操作过程中对主线程的UI进行更新。

缺陷:AsyncTask中维护着一个长度为128的线程池,同时可以执行5个工作线程,还有一个缓冲队列,当线程池中已有128个线程,缓冲队列已满时,如果 此时向线程提交任务,将会抛出RejectedExecutionException。

解决:由一个控制线程来处理AsyncTask的调用判断线程池是否满了,如果满了则线程睡眠否则请求AsyncTask继续处理。

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

答:两种,一种是Tween动画、还有一种是Frame动画。Tween动画,这种实现方式可以

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

25. Intent传递数据时,哪些数据类型可以被传递? 答:Serializable

charsequence Parcelable Bundle

26. 简要解释一下activity、 intent 、intent filter、service、Broadcase、BroadcaseReceiver

答:activity呈现了一个用户可以操作的可视化用户界面

service不包含可见的用户界面,而是在后台无限地运行 可以连接到一个正在运行的服务中,连接后,可以通过服务中暴露出来的接口与其进行通信

broadcast receiver是一个接收广播消息并作出回应的component,broadcast receiver没有界面

intent:content provider在接收到ContentResolver的请求时被激活。 activity, service和broadcast receiver是被称为intents的异步消息激活的。

intent是一个Intent对象,它保存了消息的内容。对于activity和service来说,它指定了请求的操作名称和待操作数据的URI ,Intent对象可以显式的指定一个目标component。如果这样的话,android会找到这个component(基于manifest文件中的声明)并激活它。但如果一个目标不是显式指定的,android必须找到响应intent的最佳component。

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

27. Android引入广播机制的用意? 答:a:从MVC的角度考虑(应用程序内)

b:程序间互通消息(例如在自己的应用程序内监听系统来电) c:效率上(参考UDP的广播协议在局域网的方便性)

d:设计模式上(反转控制的一种应用,类似监听者模式)

28. 请描述SAX、DOM、PULL解析xml的原理,以及各自优缺点。

答:SAX是一个用于处理XML事件驱动的“推”模型,优点是一种解析速度快并且占用内存

少的xml解析器,它需要哪些数据再加载和解析哪些内容。缺点是它不会记录标签的关系,而要让你的应用程序自己处理,这样就增加了你程序的负担。

DOM是一种文档对象模型,DOM可以以一种独立于平台和语言的方式访问和修改一个文档的内容和结构。Dom技术使得用户页面可以动态地变化,如 可以动态地显示或隐藏一个元素,改变它们的属性,增加一个元素等,Dom技术使得页面的交互性大大地增强。缺点是DOM解析XML文件时,会将XML文件 的所有内容以文档树方式存放在内存中。 Pull解析和Sax解析很相似,Pull解析和Sax解析不一样的地方是pull读取xml文件后触发相应的事件调用方法返回的是数字还有pull可以在程序中控制想解析到哪里就可以停止解析

29. 请解释什么是AIDL?

答:AIDL:Android Interface Definition Language,即Android接口描述语言。

Android系统中的进程之间不能共享内存,因此,需要提供一些机制在不同进程之间进行数据通信。

为了使其他的应用程序也可以访问本应用程序提供的服务,Android系统采用了远程过程调用(Remote Procedure Call,RPC)方式来实现。与很多其他的基于RPC的解决方案一样,Android使用一种接口定义语言(Interface Definition Language,IDL)来公开服务的接口。我们知道4个Android应用程序组件中的3个(Activity、Broadcast和Content Provider)都可以进行跨进程访问,另外一个Android应用程序组件Service同样可以。因此,可以将这种可以跨进程访问的服务称为AIDL(Android Interface Definition Language)服务。

30. android 中线程与线程,进程与进程之间如何通信 答:1 、一个 Android 程序开始运行时,会单独启动一个 Process 。

默认情况下,所有这个程序中的 Activity 或者 Service 都会跑在这个 Process 。

默认情况下,一个 Android 程序也只有一个 Process ,但一个 Process 下却可以有许多个 Thread。

2 、一个 Android 程序开始运行时,就有一个主线程 Main Thread 被创建。该线程主要负责 UI 界面的显示、更新和控件交互,所以又叫 UI Thread 。

一个 Android 程序创建之初,一个 Process 呈现的是单线程模型 — 即 Main Thread ,所有的任务都在一个线程中运行。所以, Main Thread 所调用的每一个函数,其耗时应该越短越好。而对于比较费时的工作,应该设法交给子线程去做,以避免阻塞主线程(主线程被阻塞,会导致程序假死 现象)。

3 、 Android 单线程模型: Android UI 操作并不是线程安全的并且这些操作必须在 UI 线程中执行。如果在子线程中直接修改 UI ,会导致异常。