一、什么是Android的四层体系架构?
<1>系统核心层(Linux Kernel)
Android系统是基于Linux内核的,这一层为Android设备的各类硬件提供了底层的驱动,如显示驱动、音频驱动、照相机驱动、蓝牙驱动、Wi-Fi驱动、电源管理等;
<2>执行层C/C++函数库层(Libraries)及Android Runtime
这一层经过一些C/C++库来为Android系统提供了主要的特性支持。
<3>应用程序框架层(Application FrameWork)
这一层主要提供了构建应用程序时可能用到的各类 API,Android自带的一些核心应用就是使用这些API完成的, 开发者也能够经过使用这些API来构建本身的应用程序。
<4>应用程序层(Applications)
全部安装在手机上的应用程序都是属于这一层的。
二、什么是Activity?
一个Activity一般就是一个单独的屏幕,它上面能够显示一些UI界面,可也以实现与用户的交互,得到并处理用户在屏幕上的操做,好比:点击、长按等。
全部应用的Activity都继承于android.app.Activity类。
三、Android目录结构。
<1>src:开发人员源码放置目录;
<2>gen:自动生成R.java,全部的资源文件都会在R.java文件中以final static内部类的形式被注册。因此能够经过R.id,R.layout等形式来访问资源;
<3>assets:资产目录,在这个目录中放置的资源文件,不会在R.java文件中被注册。通常程序中的音频或视频文件能够放置在这个目录下;
<4>bin:编译后的class等文件在此目录。系统自动生成APK;
<5>libs:第三方jar包;
<6>res:资源文件,是Android编程中最重要的目录。全部的资源都定义在这个目录下,前面提到的R.java中的内容也是根据这个目录下的文件自动生成的。这个目录下还有不少子目录,图片放在drawable目录下,布局放在layout目录下,字符串放在values目录下;
<7>drawable:图片放置的目录,Android中资源的文件名【a~z0~9_.】,不能以数字和大写字母开头;
<8>layout:布局文件放置的目录;
<9>menu:菜单文件放置的目录;
<10>values:字符串、尺寸等文件放置的目录;
<11>AndroidManifest.xml:Android清单文件——是Android开发中很是重要的文件。
(1)该文件中定义了本APP的版本号;
(2)适用的手机操做系统最大及最小的兼容版本号;
(3)整个项目中每写一个组件,都须要在该清单文件中注册;
(4)运行本程序的权限等等。
<12>project.properties:这个文件经过一行代码指定了编译程序时所使用的SDK版本。
4.res和assets目录的不一样?
<1>是否在R.java文件中被注册;
<2>res所放的文件类型是规定好的,而assets目录下放置的文件类型不限制;
<3>访问方法不一样。res中文件使用R.内部静态类.id来访问;而assets中的文件经过IO流来访问;
<4>assets与res/raw目录下的资源在编译打包时,不会被编译成二进制文件,因此通常在该目录下放置音频、视频等文件。
5.Dalvik VM与Java VM的区别?
<1>Dalvik和标准Java虚拟机首要差异:
(1)Dalvik基于寄存器;
(2)JVM基于栈;
基于寄存器的虚拟机对于更大的程序来讲,在他们编译的时候,花费的时间更短。
<2>Dalvik和Java字节码的区别:
(1)Dalvik执行.dex格式的字节码;
(2)JVM执行.class格式的字节码。
<3>Dalvik和Java SDK的SDK不一样;
<4>Dalvik和Java运行环境的区别:
(1)Dalvik通过优化,容许在有限的内存中同时运行多个虚拟机的实例,而且每个Dalvik应用做为一个独立的Linux进程执行。独立的进程能够防止在虚拟机崩溃的时候全部程序都被关闭;
(2)Dalvik虚拟机在android2.2以后使用JIT(Just-In-Time)技术,与传统的JIT并不彻底相同;
(3)Dalvik虚拟机有本身的bytecode,并不是使用Java bytecode。
6.Android中JAVA包功能描述。
android.app:提供高层程序模型、提供基本的运行环境;
android.content:对设备上的数据进行访问和发布的类;
android.database:经过内容提供者浏览和操做数据库;
android.graphics:底层的图形库;
android.location:定位和相关服务的类;
android.media:管理多种音频、视频的媒体接口;
android.ney:提供帮助网络访问的类;
android.os:提供了系统服务、消息传输、IPC机制;
android.opengl:提供OpenGL的工具;
android.provider:提供了类访问Android内容提供者;
android.telephony:提供与拨打电话相关的API交互;
android.view:提供基础的用户界面接口框架;
android.util:涉及工具性的方法,例如时间日期的操做;
android.webkit:默认浏览器操做接口;
android.widget:包含各类UI元素在应用程序的屏幕中使用。
七、Android程序的核心组件有哪些?
View:界面视图、组织UI控件
Intent:意图,支持组件间通讯
Activity:处理界面与UI互动
Content Provider:存储共享数据
IntentReceiver:接受信息及事件处理
Service:后台服务(如硬件与驱动的服务)
八、Activity的生命周期。
void onCreate(Bundle savedInstanceState)
void onStart()
void onRestar()
void onRestart()
void onPause()
void onStop()
void onDestory()
九、Android中的日志工具类Log提供了哪些方法?
<1>Log.v()
用于打印那些最为琐碎的,意义最小的日志信息。对应级别verbose(啰嗦的),是Android日志里面级别最低的一种。
<2>Log.d()
用于打印一些调试信息,这些信息对调试程序和分析问题是有帮助的。对应级别debug,比verbose高一级。
<3>Log.i()
用于打印一些比较重要的数据,这些数据应该是你很是想看到的,能够帮你分析用户行为。对应级别info,比debug高一级。
<4>Log.w()
用于打印一些警告信息,提示程序在这个地方可能会有潜在的风险,最好去修复一下这些出现警告的地方。对应级别warn,比info高一级。
<5>Log.e()
这个方法用于打印程序中的错误信息,好比程序进入到catch语句中。若是有错误信息打印出来了,说明程序出现了严重的问题,必须尽快修复。对应级别error,比warn高一级。
十、Android的打包过程是什么?
jdk dx.bat aapt 签名jarsigner
.java -----> .class ------>.dex(res,assets,androidmanifest.xml)------->.apk--------->final apk
java