Andriod复习
1.Android系统架构
从上到下:应用层、框架层、核心类库与运行时、硬件抽象层、linux内核
| | |
应用部分 核心部分 底层部分
2. Android应用采用模型的设计思想取自web2.0的Mashup概念,基于组件的应用设计模式。
在该模式下,每个应用都由一系列的组件搭建而成。
3. MVC模式:
Model(模型):是应用程序中用于处理应用程序数据逻辑的部分。通常模型对象负责在数据库中存放数据。
View(视图):是应用程序处理数据显示的部分。
Controller(控制器):是应用程序中处理用户交互的部分。
通常是控制器从视图中读取数据,控制用户的输入,并向模型发送数据。
MVC的好处:可以让你在同一时间专注于一个方面。让测试更容易。简化分组开发,不同的开发人员可以同时开发视图、控制器逻辑与业务逻辑。
框架通常是代码重用,设计模式是设计重用,而架构是介于两者之间。
注意:Android的界面框架没有采用MVC的架构。因此在开发时,需要特别注意逻辑代码和界面的分离。
4.在Android中,所有的组件都是在主线程上构造的,如果涉及到数据库操作、网络通讯、复杂运算等耗时的操作,那么就需要将相关的操作 放入独立的进程或线程中去执行。将组件放入独立的进程中,可以通过配置文件的process参数来实现。
5.Android系统通讯方式是什么?
Binder通讯,优势是高效,特点是:同步,非异步
6. 触发器组件对象也是在应用进程的主线程中被构造的。因此,其功能函数onReceive的执行必须是同步且快速的。否则会阻塞与用户交互 的当前进程。
7. 广播事件的发送。Android的事件广播主要有两种:普通广播和有序广播。
(1)普通广播。所有注册了该广播事件的触发器组件都会获得事件通知,并发地在各自的应用进程中执行。如开机事件。
(2)有序广播。所有监听该事件的触发器组件,都会依照设定的优先级进行排序,从高到低依次处理该事件。优先级高的触发器组件可 以终止该广播事件的传播。
8. Content Provide解析
在Android中,除了放在扩展存储设备等共享目录中的数据,各应用所有的数据库、文件、资源信息等内容都是私有的。数据源组件(Content Provide)正是为了帮助在Android的各个应用间共享数据而设计的。
9. 硬实时与软实时
硬实时系统中,不仅要求任务响应要实时,而且要求在规定时间内完成事件的处理;而在软实时系统仅要求事件响应是实时的,并不要求限定某一任务必须在多长时间内完成。通常,大多是实时系统是两者的结合。
Android是基于linux内核的,因此属于软实时。
11. 请介绍一下Android中常用的五种布局?
(1)LinearLayout:线性布局,orientation--容器内元素的排列方式。gravity:内容的排列方式。
(2)RelativeLayout:相对布局。
(3)TableLayout:表格布局。表格布局主要以行列的形式来管理子控件,其中每一行即一个TableRow对象,每个TableRow对象可以添加子控件。
(4)AbsoluteLayout:绝对布局。
(5)FrameLayout:层叠布局。从左上角为起点,将FrameLayout内的元素一层覆盖一层地显示。
12. 请介绍Android的数据存储方式?
(1)使用SharedPreference:一个轻量级的存储类,用于保存应用的一些常用配置。
(2)文件存储数据。
(3)SQLite数据库存储数据。
(4)使用ContentProvider存储数据。
(5)使用网络存储数据。
13. 如何启动service,如何停止service?
(1)通过Context.startService()启动,调用Context.stopService结束。
(2)通过Context.bindService()启动,调用Context.unbindService()结束。
14. 请解释下栽单线程模型中的Message、Handler、Message Queue、Looper之间的关系。
Handler获取looper对象,Message Queue存放Message,looper从Message Queue中取出Message,再有Handler进行Message的分发和处理。
15. 什么是ANR,如何避免它?
ANR:Application Not Responding。在主线程中运行着需要消耗大量时间的操作都会引发ANR。对于比较耗时的操作,如访问网络和数据库,或者开销很大的计算,需要在一个单独的子线程中完成。
16. 简要解释一下activity、intent、intent filter、service、Broadcast、BroadcastReceiver。
一个activity呈现一个用户可以操作的可视化用户界面。
一个service不包含可见的用户界面,而是在后台无限地运行。
一个intent对象,它保存了消息的内容。对于activity和service来说,它指定了请求的操作名称和待操作数据的URI。
17. 横竖屏切换的时候activity的生命周期?
18. Android引入广播机制的意图?
(1)方便组件间的通讯与数据交互。
(2)程序间互通消息(如获取开机信息等)
(3)效率高(参考UDP的广播协议在局域网的方便性)。
19. Android中有那几种解析xml的类?
xml解析主要有三种:SAX、DOM、PULL。
20. 谈谈Android的IPC机制。
IPC是内部程序通讯的简称,是共享“命名管道”的资源。Android中的IPC机制是为了让activity和service之间可以随时的进行交互。故在Android中该机制,只适用于Android与Service的通讯,类似于C/S模式的访问。
21. 嵌入式操作系统内存管理有哪几种,各有何特性?
页式、段式、段页式,用到了MMU,虚拟空间等技术。
22. 一条最长的短信息约占多少字节?
中文70,英文160字节。
23. handler机制的原理。
Android提供了handler和looper来满足线程间的通讯。
(1)looper:一个线程可以产生一个looper对象,由它来管理此线程里的Message Queue(消息队列)。
(2)Handler:可以构造Handler与looper通讯,以便push消息到消息队列里,或者接受looper从消息队列里送来的消息。
(3)Message Queue:消息队列。
(4)线程:UI thread通常是主线程,而Android程序启动的时候自动替它建立一个Message Queue。
24. 解析xml有哪几种方式?
答:XML解析主要有三种方式,SAX,DOM,PULL。常规在PC上用DOM比较好,但对于性能比较敏感的手机应该用SAX。
比较:DOM方式会把整个XML文件加载到内存中,比较占内存。SAX读取是单向的,不占内存空间,解析属性方便,但对于嵌套多个分支的处理不太方便。
25. Activity的生命周期?
(1)onCreate:在这里创建界面,做一些数据的初始化工作。
(2)onStart:在这一步变成用户可见不可交互
(3)onResume:变成和用户可交互。
(4)onPause:到这一步变成可见但不可交互,如对话框弹出。
(5)onStop:变得不可见。如Activity整个被覆盖。
(6)onDestroy:Activity被销毁。
26. 如何退出程序所有的Activity?
答:用单例模式创建一个Activity管理对象,该对象有一个Activity容器(LinkedList)负责存储新开启的每一个Activity,
。退出程序时,遍历容器并调用finish方法。最后System.exit(0);
27. java中==号与equals的区别?
答:==是比较两者内存中存放地址,equals比较是两者内容。
28. java线程中run和start方法的区别?
Thread类中run()和start()方法的区别如下:
run()方法:在本线程内调用该Runnable对象的run()方法,可以重复多次调用;
start()方法:启动一个线程,调用该Runnable对象的run()方法,不能多次启动一个线程;
29. View、surfaceView、GLSurfaceView有什么区别?
答:view是最基础的,必须在UI主线程内更新画面,速度较慢。
surfaceView是view的子类,类似使用双缓机制,在新的线程中更新画面所以界面速度比View快。
GLSurfaceView 是SurfaceView的子类,opengl 专用的(OpenGL:是个定义了一个跨编程语言、跨平台的编程接口规格的专业的图形程序接口)
双缓存大概的意思是指在内存区域里有一个缓存区域与界面图片对应,当界面发生变化时,先在缓存区域中把界面的内容画好,然后一次性把它显示出来,这样既没有闪烁感,显示效率也更高。
30. Adapter有什么作用?常见的Adapter有哪些?
答:Adapter是连接后端数据和前端显示的适配器接口。Adapter有SimpleAdapter、BaseAdapter、ArrayAdapter等。
31. Android的数字签名?
答:Android系统中,所有的安装到系统的应用程序都必须有一个数字证书。此数字证书用于标识应用程序作者与应用程序之间的信任关系。
好处:
(1)便于程序的升级,当新版程序与旧版程序的数字证书相同时,Android系统认为这两个程序是同一个程序的两个版本。