Android工程师常见面试题集答案

时间:2021-04-12 00:47:48

13、描述一下Android的系统结构?

  1. android系统架构分从下往上为linux 内核层、运行库、应用程序框架层、和应用程序层。
  2. linuxkernel:负责硬件的驱动程序、网络、电源、系统安全以及内存管理等功能。
  3. libraries和 androidruntime:libraries:即c/c++函数库部分,大多数都是开放源代码的函数库,例如webkit,该函数库负责 android网页浏览器的运行,例如标准的c函数库libc、openssl、sqlite等,当然也包括支持游戏开发2dsgl和 3dopengles,在多媒体方面有mediaframework框架来支持各种影音和图形文件的播放与显示,例如mpeg4、h.264、mp3、 aac、amr、jpg和png等众多的多媒体文件格式。android的runtime负责解释和执行生成的dalvik格式的字节码。
  4. applicationframework(应用软件架构),java应用程序开发人员主要是使用该层封装好的api进行快速开发。
  5. applications:该层是java的应用程序层,android内置的googlemaps、e-mail、即时通信工具、浏览器、mp3播放 器等处于该层,java开发人员开发的程序也处于该层,而且和内置的应用程序具有平等的位置,可以调用内置的应用程序,也可以替换内置的应用程序。

14、Android应用对内存是如何限制的?我们应该如何合理使用内存?

Android应用的开发语言为Java,每个应用最大可使用的堆内存受到Android系统的限制

•Android每一个应用的堆内存大小有限

•通常的情况为16M-48M

通过ActivityManager的getMemoryClass()来查询可用堆内存限制

3.0(HoneyComb)以上的版本可以通过largeHeap=“true”来申请更多的堆内存

•NexueHeap 512

•如果试图申请的内存大于当前余下的堆内存就会引发OutOfMemoryError()

•应用程序由于各方面的限制,需要注意减少内存占用,避免出现内存泄漏。

获取这个代码:

mActivtyManager=(ActivityManager)this.getSystemService(Context.ACTIVITY_SERVICE);
mMaxMemory=mActivityManager.getMempryClass;

如何合理使用内存?

1、注意资源回收,像数据库,输入输出流,定位操作这样的对象,要在使用完及时关闭流。

2、少使用静态变量,因为系统将静态变量的优先级设定的很高,会最后回收。所以可能因为静态变量导致该回收的没有回收。而回收了不该回收的内存。

3、注意大图片的缩放,如果载入的图片很大,要先经过自己程序的处理,降低分辨率等。最好设置多种分辨率格式的图片,以减少内存消耗。

4、动态注册监听,把一些只有显示的时候才使用到的监听放进程序内部,而不是放在manifesat中去。

5、减少使用动画,或者适当减少动画的帧数。

6、注意自己的程序逻辑,在该关闭自己程序的控件的时候,主动关闭,不要交给系统去决定。(这个要自己把握好,也不是说都自己搞定,只有那些自己确定需要关闭的对象,自己将其关闭。)