一、请谈一下Android系统的架构
android系统架构分为四层,从上层到下层分别是:应用程序层、应用程序框架层、系统运行库层及Linux内核层
二、谈谈android常用的五种布局
FrameLayout(框架布局):放入其中的所有元素都被放置在最左上的区域,而且无法为这些元素指定一个确切的位置,下一个子元素重叠覆盖上一个子元素,适合浏览单张图片
LinearLayout(线性布局):应用程序中最常用的的布局方式,主要提供控件水平或者垂直排列的模型,每个子组件都是以垂直或水平的方式来定位(默认是垂直)
AbsoluteLayout(绝对布局):采用坐标轴的方式定位组件,左上角是(0,0)点,往右X轴递增,往下Y轴递增,组件定位属性为android:layout_x和android:layout_y来确定坐标
RelativeLayout(相对布局):根据另外一个组件或是顶层父组件来确定下一个组件的位置,和CSS里面的类似
TableLayout(表格布局):类似Html里的Table。使用TableRow来布局,其中TableRow代表下一行,TableRow的每一个视图组件代表一个单元格
三、谈谈Android提供的五种数据存储方式
1.使用SharedPreferences存储数据:它是android提供的用来存储一些简单配置信息的一种机制,采用了XML格式将数据存储到设备中。只能在一个包内使用,不能在不同的包之间使用。
2.使用文件存储数据:文件存储方式是一种较常用的方法,在android中读取/写入文件的方法与java中实现I/OR的程序是完全一样的,提供了openFileInput()和openFileOutput()方法来读取设备上的文件。
3.SQLite数据库存储数据:SQLite是android所带的一个标准的数据库,它支持SQL语句,这是一个轻量级的嵌入式数据库
4.使用ContentProvider存储数据:主要用于应用程序之间进行数据交换,从而能够让其他应用保存或者读取此ContentProvider的各种数据类型
5.使用网络存储数据:通过网络止提供给我们的存储空间来上传(存储)和下载(获取)我们存储在网络空间中数据信息
四、谈谈android中Activity、Intent、ContentProvider、Service各有什么区别
Activity(活动):是最基本的android应用程序组件。一个activity就是一个单独的屏幕,每一个activity都被视为一个独立的类,并且从activity基类继承而来。
Intent(意图):顾名思义,它的作用是描述应用想做什么,最重要的部分是动作和动作对应的数据。
ContentProvider(内容提供器):android应用程序能够将它们的数据保存到文件、SQLite数据库中,甚至是任何有效的设备中。当你想将你的应用数据和其他应用共享时,内容提供器就可以发挥作用了。
Service(服务):具有一段较长生命周期且没有用户界面的程序。
五、谈谈View、SurfacecView、GLSurfaceView有什么区别
View是最基础的,必须在UI主线程内更新画面,速度较慢
SurfaceView是View的子类,类似使用双缓机制,在新的线程中更新画面,所以刷新界面的速度比View快
GLSurfaceView 是SurfaceView的子类,openGL专用的
六、Adapter有什么作用?常见的Adapter有哪些?
adapter是连接后端数据和前端显示的适配器接口。常见的Adapter有:ArrayAdapter、BaseAdapter、CursorAdapter、HeaderViewListAdapter、ListAdapter、ResourceCursorAdapter、SimpleAdapter、SimpleCursorAdatper、SpinnerAdapter、WrapperListAdapter等。
七、AndroidManifest.xml文件中包括哪些信息?
manifest:根节点,描述了AndroidManifest.xml中所有的内容。
package(包名):指定为本应用java主程序包的包名。当没有指定apk的文件名时,编译后产生程序包将以此命名。本包名应当在Android系统运行时唯一。
certificate(认证):指定本应用程序所授予的信任级别,目前有的认证级别有platform(system)、shared、media以及应用自定义的认证。不同的认证可以享受不再的权限。
permission-group(权限级):权限级的定义是为了描述一级具有共同特性的权限。
permission(权限):权限用来描述是否拥有做某件事的权力。Android操作系统中权限是分级的,分为:普通级别(Normal)、危险级别(dangerous)、签名级别(signature)和系统/签名级别(signature or system)。系统中所有预定义的权限根据作用的不同,分别属于不同的级别。对于普通和危险级别的权限,我们称之为低级权限,应用申请即授予。其他两级权限,我们称之为高级权限或系统权限,应用拥有platform级别的认证才能申请。当应用试图在没有权限的情况下做受限操作,应用将被系统杀掉以警示。系统应用可以使用任何权限。权限的声明者可无条件使用该权限。
permission-tree(权限树):权限树的设置是为了统一管理一级权限,声明该树下的权限所有者归属该应用。系统提供了API,应用可以在运行时用PackageManager.addPermission()方法动态添加。
uses-permission:应用需要的权限应当在此处申请,所申请的权限应当被系统或某个应用所定义,否则视为无效申请。同时,使用权限的申请需要遵循权限授予条件,非platform认证的应用无法申请高级权限。
uses-sdk:标识本应用运行的SDK版本。高兼容性的应用可以忽略此项。
application:android应用内*别(top level )的模块,每个应用内最多只能有一个application,如果应用没有指定该模块,一个默认的application将被启用。application将在应用启动时最先被加载,并存活在应用的整个运行时生命周期。因此一些初始化的工作适合在本模块完成,Application元素有许多属性,其中:“persistent”表示本应用是否为常驻内存,“enable”表示本应用当前是否应当被加载。
在AndroidManifest.xml文件中,运行时模块的定义都作为本模块的子元素。当运行时模块被调度时,如果应用没有启动,将首先启动应用进行初始化,然后调度对应模块。
activity:它是application模块的运行时子元素,标识了一个UI。除了application,一个应用可以声明并实现零到多个其他运行时模块,activity也同样。activity也包含了许多定义它工作状态的属性,其中:“name”是必须的,它指定了该activity所在的文件名,如果该文件所属包不同于该应用的包名(即本描述文件的最开始处),那么名字前面需要加入所在包名。activity通过增加intent-fliter来标识哪些intent可以被处理,同时intent也是调度activity的主要参数。
receiver:它是application的运行时子元素。receiver通过增加intent-fliter来标识它需要接受哪些intent。当收到intent后,receiver将根据不同的intent进行不同的处理。当一个intent发出后,所有注册了该intent的receiver都将会收到,系统根据receiver在系统中的注册次序顺序发送。当一个receiver处理完该intent后,系统才会向下一个receiver发送。当一个receiver有多个未接收的intent时,将按照intent发送的次序顺序接收。
service:它也是application的运行时子元素。service属于后台模块,启动后将长时间运行,除非停止该service或所在应用进程被杀死。
provider:它也是application的运行时子元素。它继承于ContentProvider,是对该应用管理的用户数据的结构化接入,是基于数据库操作方式的封装。如果应用允许外部应用访问/管理它的用户数据,provider是android平台提供的最佳方式。
activity-alias:顾名思义,是已有activity的别名。
uses-library:标识应用启动所必须的共享库。