Android学习之期末复习重点整理

一、题型

选择题 15×2 30分 填空题 10×2 20分 简答题 5×4 20分 程序填空题 15×2 30分

二、考点整理

第一章 Android简介

Android 采用了软件堆层的架构,共分4层:

  • 第一层:Linux内核,提供由操作系统内核管理的底层基础功能;
  • 第二层:中间件层,由库函数和 Android 运行时构成;
  • 第三层:应用程序框架层,提供了 Android 平台基本的管理功能和组件重用机制;
  • 第四层:应用程序层:提供一系列核心应用程序。

第二章 Android 开发环境

1. Android 平台的 Eclipse 开发环境搭建步骤:

  • 安装 JDK,进行 Java 环境变量配置
  • 安装 Eclipse
  • 安装 Android SDK
  • 安装 ADT 插件

2. Android SDK 包括哪些内容?
Android学习之期末复习重点整理_第1张图片

  • add-ons 目录用来存放 Google 提供的地图开发包
  • docs 目录下的是 Android SDK 的帮助文档
  • extras/google 目录下保存了 Android 手机的 USB 驱动程序
  • platforms 目录用来存放 SDK 和 AVD 管理器下载的各种版本的 SDK
  • platforms-tools 目录中保存了与平台调试相关的工具,如 adb 、aapt 和 dx 等
  • samples 目录是示例代码和程序的存放目录
  • temp临时存放文件的目录
  • tools 目录保存了通用的 Android 开发调试工具和 Android 手机模拟器
  • SDK Manager.exeSDK 管理器
  • AVD Manager.exeAVD 管理器
  • SDK Readme.txt 是 Android SDK 的说明文档

3. SDK 中英文全称
SDK:Android 软件开发工具包Android Software Development Kit

4. ADB中英文全称及作用
ADB:Android 调试桥Android Debug Bridge
ADB 是用于连接 Android 设备或模拟器的工具,负责将应用程序安装到模拟器和设备中,或从模拟器或设备中传输文件。

第三章 第一个Android程序

1. AVD 中英文全称
AVD:Android 虚拟设备Android Virtual Device

2. Android程序结构核心目录里分别存放什么内容?

  • src 目录是源代码目录,保存所有允许用户修改的 java 文件和用户自己添加的 java 文件;
  • gen 目录用来保存 ADT 自动生成的 java 文件;
  • assets 目录用来存放原始格式的文件;
  • bin 目录保存了编译过程中产生的文件;
  • res 目录是资源目录,Android 程序所有的图像、颜色、风格、主题、界面布局和字符串等资源都保存在其下的几个子目录中。

3. R.java 的作用
R.java 文件是 ADT 自动生成的文件,包含对 drawable、layout 和 values 目录内的资源的引用指针,Android 程序能够直接通过 R 类引用目录中的资源。

4. AndroidManifest.xml作用
AndroidManifest.xml 是 XML 格式的 Android 程序声明文件,包含了 Android 系统运行 Android 程序前所必须掌握的重要信息。

第四章 Android 生命周期

1. Android 生命周期有哪5个进程?分别在何时执行或撤销?优先级分别是什么?
Android学习之期末复习重点整理_第2张图片

  • 前台进程:
    是与用户正在交互的进程,包含以下四种情况:
    – 进程中的 Activity 正在与用户进行交互;
    – 进程服务被 Activity 调用,而这个 Activity 正在与用户进行交互;
    – 进程服务正在执行生命周期中的回调函数,如 onCreate()、onStart() 或 onDestroy();
    – 进程的 BroadcastReceiver 正在执行 onReceive() 函数
    Android 系统在多个前台进程同时运行时,可能会出现资源不足的情况,此时会清除部分前台进程,保证主要的用户界面能够及时响应。
  • 可见进程:
    能够被用户看见,却不在前台与用户交互,不影响界面事件的进程。
    一般 Android 系统会存在少量的可见进程,只有在极端的情况下,Android 系统才会为保证前台进程的资源而清除可见进程。
  • 服务进程:
    一个包含已经启动的服务的进程就是服务进程。
    Android 系统除非不能保证前台进程或可视进程所必要的资源,否则不强行清除服务进程。
  • 后台进程:
    一个进程不包含任何已经启动的服务,且没有任何用户可见的 Activity ,则这个进程就是后台进程。
    一般情况下,Android 系统中存在数量较多的后台进程,在系统资源紧张时,系统将优先清除用户较长时间没有见到的后台进程。
  • 空进程:
    空进程是不包含任何活跃组件的进程。
    空进程在系统资源紧张时会被首先清除,但为了提高 Android 系统应用程序的启动速度,Android 系统会将空进程保存在系统内存中,在用户重新启动该程序时,空进程会被重新使用。

2. Android 系统四大组件的名称、概念及其作用
Activity 活动。 是 Android 程序的呈现层,显示可视化的用户界面,并接收与用户交互所产生的界面事件。
Service 服务。 一般用于没有用户界面,但需要长时间在后台运行的应用。
Broadcast Receiver 广播接收器。 用来接收并响应广播消息的组件。
Content Provider 内容提供者。 Android 系统提供的一种标准的共享数据的机制,应用程序可以通过 Content Provider 访问其他应用程序的私有数据。

3. Activity 四种状态
Android学习之期末复习重点整理_第3张图片
4. Activity 的生命周期及其事件回调函数
Android学习之期末复习重点整理_第4张图片
Android学习之期末复习重点整理_第5张图片
5. 书P72 ActivityLifeCycle 示例

6. Logcat 有哪几种日志类型?级别是什么?这几种日志的调用代码?

  • 详细信息 级别最低 Log.v();
  • 调试信息 级别倒数第二低 Log.d();
  • 通告信息 级别倒数第二低(与调试信息并列) Log.i();
  • 警告信息 级别第二高 Log.w();
  • 错误信息 级别最高 Log.e()。

第五章 Android用户界面

1. 主流控件 TextView、EditText、Button、CheckBox、RadioButton、Spinner、ListView 使用的关键代码、进行处理的事件函数和主要的属性:

//主要属性
<Xxx
	android:id="@+id/XxxId" //id
	android:layout_width="match_parent" //宽度
	android:layout_height="wrap_content" //高度
	android:layout_margin="xxdp" //外边距
	android:padding="xxdp" //内边距
	android:text="XXX" //文本
	...
	>
</Xxx>
Xxx xxx = (Xxx)findViewById(R.id.XxxId);

TextView:
<TextView></TextView>
textView.setText(Xxx);textView.getText();

EditText:
<EditText></EditText>
editText.getText();

Button:
<Button></Button>
//设置点击事件监听器
//写法一:
button.setOnClickListener(new View.OnClickListener(){
	public void onClick(View view){
		...
	}
});
//写法二:
Button.OnClickListener buttonListener = new Button.OnClickListener(){
	public void onClick(View view){
		switch(view.getId()){
			case R.id.xxxBtn:
				break;
			...
		}
	}
};
button1.setOnClickListener(buttonListener);
button2.setOnClickListener(buttonListener);
...

CheckBox:
<CheckBox></CheckBox>
//设置点击事件监听器
CheckBox.OnClickListener checkBoxListener = new CheckBox.OnClickListener(){
	public void onClick(View view){
		...
	}
};
checkBox1.setOnClickListener(checkBoxListener);
checkBox2.setOnClickListener(checkBoxListener);
...

RadioButton:
<RadioGroup>
	<RadioButton></RadioButton>
	<RadioButton></RadioButton>
	...
</RadioGroup>
//设置点击事件监听器
RadioButton.OnClickListener radioButtonListener = new RadioButton.OnClickListener(){
	public void onClick(View view){
		...
	}
};
radioButton1.setOnClickListener(radioButtonListener);
radioButton2.setOnClickListener(radioButtonListener);
...

Spinner:
<Spinner></Spinner>
List<String> list = new ArrayList<String>();
list.add("1");
list.add("2");
list.add("3");
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,android.R.layout.simple_spinner_item,list);
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
spinner.setAdapter(adapter);

ListView:
<ListView></ListView>
List<String> list = new ArrayList<String>();
list.add("1");
list.add("2");
list.add("3");
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1,list);
listView.setAdapter(adapter);
//声明 ListView 子项的点击事件监听器
AdapterView.OnItemClickListener listViewListener = new AdapterView.OnItemClickListener(){
	public void onItemClick(AdapterView<?> arg0,View arg1,int arg2,long arg3){
		...
	}
};
listView.setOnItemClickListener(listViewListener);

2. 几种布局的定义和主要属性:

  • 线性布局:
    在线性布局中,所有的子元素都在垂直或水平方向按照顺序在界面上排列。
<LinearLayout>LinearLayout>
主要属性:android:orientation="vertical" vertical-垂直 horizontal-水平
  • 框架布局:
    最简单的界面布局,用来存放一个元素的空白空间,且子元素的位置是不能够指定的,只能够放置在空白空间的左上角。
  • 表格布局:
    将屏幕划分为表格,通过指定行和列可以将界面元素添加到表格中。
<TableLayout>
	<TableRow> 
		...
	TableRow>
	<TableRow>
		...
	TableRow>
	...
TableLayout>
  • 相对布局:
    是一种非常灵活的布局方式,能够通过指定界面元素与其他元素的相对位置关系,确定界面中所有元素的布局位置。
<RelativeLayout>RelativeLayout>
主要属性:
相对父元素:true/false
android:layout_centerHorizontal   水平居中 
android:layout_centerVertical    垂直居中 
android:layout_centerInparent    相对于父元素完全居中 
android:layout_alignParentBottom 位于父元素的下边缘 
android:layout_alignParentLeft   位于父元素的左边缘 
android:layout_alignParentRight  位于父元素的右边缘 
android:layout_alignParentTop    位于父元素的上边缘 
相对同级元素:值必须为id的引用名"@id/XxxId" 
android:layout_below      位于元素的下方 
android:layout_above      位于元素的的上方 
android:layout_toLeftOf   位于元素的左边 
android:layout_toRightOf  位于元素的右边 
  • 绝对布局:
    能通过指定界面元素的坐标位置,来确定用户界面的整体布局。
<AbsoluteLayout>AbsoluteLayout>
主要属性:
android:layout_x="xxdp" 横坐标
android:layout_y="xxdp" 纵坐标
  • 网格布局:
    网格布局将用户界面划分为网格,界面元素可随意摆放在这些网格中。
<GridLayout>GridLayout>
主要属性:
android:columnCount="4" 纵向分为4列
android:layout_columnSpan="2" 控件所占的列的数量
android:layout_column="0" 当前元素列的起始位置

3. 选项菜单在哪个函数中创建,响应函数是什么?

初始化:onCreateOptionsMenu(Menu menu);
响应函数:onOptionsItemSelected(MenuItem item);

4. 快捷菜单在哪个函数中创建,响应函数是什么?

初始化:onCreateContextMenu(ContextMenu menu,View v,ContextMenuInfo menuInfo);
响应函数:onContextItemSelected(MenuItem item);

5. 将快捷菜单注册到界面中的某个控件所调用的函数是?

registerForContextMenu(控件);

6. 界面事件返回值对消息传递的影响机制:
Android系统界面事件的传递和处理遵循一定的规则。 首先,如果界面控件设置了事件监听器.则事件将先传递给事件监听器;相反,如果界面控件没有设置事件监听器,界面事件则会直接传递给界面控件的其他事件处理函数。即使界面控件设置了事件监听器,界面事件也可以再次传递给其他事件处理函数,是否继续传递事件给其他处理函数是由事件监听器处理函数的返回值决定的。如果监听器处理函数的返回值为 true ,表示该事件已经完成处理过程,不需要其他处理函数参与处理过程,这样事件就不会再继续进行传递。反之,如果监听器处理函数的返回值为 false ,则表示该事件没有完成处理过程,或需要其他处理函数捕获到该事件,事件会传递给其他的事件处理函数。

7. 书P138 KeyEventDemo

8. 触摸事件的响应函数:

touchView.setOnTouchListener(new View.OnTouchListener(){
	public boolean onTouch(View v,MotionEvent){
		...
	}
});
//触摸事件:ACTION_DOWN/ACTION_UP/ACTION_MOVE

9. 关于触点压力大小的函数:

//触点压力是一个介于0和1之间的浮点数,用来表示用户对触摸屏施加压力的大小,接近0表示压力较小,接近1表示压力较大。
getPressure();

第六章 组件通信与广播消息

1. 什么是 Intent,它的作用是什么?

  • Intent是一种轻量级的消息传递机制,可以在同一个应用程序内部的不同组件之间传递信息,也可以在不同应用程序的组件之间传递信息,还可以作为广播事件发布 Android 系统消息。
  • 作用一:启动其他组件并传递信息,如 Activity、Service
  • 作用二:在 Android 系统上发布广播消息。

2. Intent 启动 Activity 的隐式启动与显式启动的定义和区别:
Intent 启动 Activity 方式可以分为显式启动和隐式启动。显式启动必须在 Intent 中指明启动的 Activity 所在的类,而隐式启动则由 Android 系统,根据 Intent 的动作和数据来决定启动哪一个 Activity。也就是说在隐式启动时,Intent 中只包含需要执行的动作和所包含的数据,而无须指明具体启动哪一个 Activity ,选择权有 Android 系统和最终用户来决定。

3. 隐式启动的工作原理:
选择隐式启动 Activity,Android 系统会在程序运行时解析 Intent ,并根据一定的规则对 Intent 和 Activity 进行匹配,使 Intent 上的动作、数据与 Activity 完全吻合,由此决定启动哪一个 Activity 。

4. 隐式启动与显式启动的关键代码:

  • 显示启动
//参数一:应用程序上下文 参数二:要启动的 Activity(接收 Intent 的目标组件)
Intent intent = new Intent(XxxActivity.this,TargetActivity.class);
startActivity(intent);
  • 隐式启动
//参数一:Intent 动作 参数二:数据
Intent intent = new Intent(Intent.ACTION_VIEW,Uri.parse(urlString));
startActivity(intent);

5. 书P151 ActivityCommunication 示例

6. 什么是 Intent 过滤器?过滤机制是什么?相对应的 AndroidManifest.xml 如何配置?

  • Intent 过滤器是一种根据 Intent 中的动作(action)、类别(category)和数据(data)等内容,对适合接收该 Intent 的组件进行匹配和筛选的机制。
  • AndroidManifest.xml 文件中每个组件的都被解析成一个 Intent 过滤器对象。当应用程序安装到 Android 系统时,所有的组件和 Intent 过滤器都会注册到 Android 系统中。这样,Android 系统便可以将任何一个 Intent 请求通过 Intent 过滤器映射到相应的组件上。
  • 配置 AndroidManifest.xml
<activity ...>
	<intent-filter>
		<action android:name="android.intent.action.VIEW" />
		<category android:name="android.intent.category.DEFAULT" />
		<data android:scheme="schemodemo" android:host="edu.hrbeu" />
	intent-filter>
activity>

对应的 java 使用

Intent intent = new Intent(Intent.ACTION_VIEW,Uri.parse("shcemodemo://edu.hrbeu/path"));
startActivity(intent);

7. Intent 解析的匹配规则是什么?

  • Andoid 系统把所有应用程序包中的 Intent 过滤器集合在一 起,形成一个完整的 Intent 过滤器列表。
  • 在 Intent 与 Intent 过滤器进行匹配时,Android 系统会将列表中所有 Intent 过滤器的“动作”和“类别”与 Intent 进行匹配,任何不匹配的 Intent 过滤器都将被过滤掉。没有指定“动作”的 Intent 过滤器可以匹配任何的 Intent ,但是没有指定“类别”的 Intent 过滤器只能匹配没有“类别”的 Intent 。
  • 把 Intent 数据 Uri 的每个子部与 Intent 过滤器的标签中的属性进行匹配,如果标签指定了协议、主机名、路径名或 MIME 类型,那么这些属性都要与 Intent 的 Uri 数据部分进行匹配,任何不匹配的 Intent 过滤器均被过滤掉。
  • 如果 Intent 过滤器的匹配结果多于一个,则可以根据在标签中定义的优先级标签来对 Intent 过滤器进行排序,优先级最高的 Intent 过滤器将被选择。

8. 书P158 BroadcastReceiverDemo

第七章 后台服务

1. Service 的两种生命周期的名称、定义:

  • 完整生命周期:onCreate() 开始到 onDestroy() 结束,在 onCreate() 中完成 Service 的初始化工作,在 onDestroy() 中释放所有占用的资源。
  • 活动生命周期:onStart() 开始,但没有与之对应的“停止”函数,因此可以粗略地认为活动生命周期是以 onDestroy() 标志结束。

2. 启动方式使用 service 需要使用什么函数、它的特点?

  • 调用 Context.startService() 启动服务,调用 Context.stopService()Service.stopSelf() 停止服务
  • 在启动方式中,启动 Service 的组件不能够获取 Service 的对象实例,因此无法调用 Service 中的任何函数,也不能够获取 Service 中的任何状态和数据信息。

3. 绑定方式使用 service 需要调用什么函数、它的特点?

  • 调用 Context.bindService() 建立服务链接,调用 Context.unbindService() 停止服务链接
  • 在绑定方式中,Service 的使用是通过服务链接(Connection)实现的,服务链接能够获取 Service 的对象实例,因此绑定 Service 的组件可以调用 Service 中实现的函数,或直接获取 Service 中状态和数据信息。

4. 书P165 SimpleRandomServiceDemo

5. Android 中线程的概念:

  • 线程是独立的程序单元,多个线程可以并行工作
  • 使用线程
//实现 Runnable 接口,并重载 run() 函数
private Runnable backgroundWork = new Runnable(){
	public void run(){
		...
	}
};
//创建 Thread 对象,并将 Runnable 对象作为参数传递给 Thread 对象
//参数一:线程组 参数二:需要执行的 Runnable 对象 参数三:线程的名称
private Thread workThread;
workThread = new Thread(null,backgroundWork,"WorkThread");
//调用 start() 方法启动线程
workThread.start();
//通告线程准备终止
workThread.interrupt();

6. 书P175 SimpleMathServiceDemo

7. 什么是远程服务,何时使用远程服务?
服务和调用者在不同的两个进程中,调用过程需要跨越进程才能实现。

8. 什么是 AIDL,参数传递类型有哪些?

  • AIDL(Android Interface Definition Language)是 Android 系统自定义的接口描述语言
  • 参数传递类型:in 调用者到远程服务;out 远程服务到调用者;inout 调用者到远程服务,再从远程服务到调用者。

9. 远程服务的创建和调用需要使用 AIDL 语言,它的步骤是什么?

  • 使用 AIDL 语言定义远程服务的接口;
  • 通过继承 Service 类实现远程服务;
  • 绑定和使用远程服务。

第八章 数据存储与访问

1. SharedPreferences 的特点,三种访问模式:

  • 是一种轻量级的数据保存方式,通过 SharedPreferences 开发人员可以将 NVP(Name/Value/Pair,名称/值对)保存在 Android 的文件系统中,完全屏蔽对文件系统的操作过程,仅通过调用 SharedPreferences 中的函数就可以实现对 NVP 的保存和读取。
  • MODE_PRIVATE 私有模式
  • MODE_WORLD_READABLE 全局读
  • MODE_WORLD_WRITEABLE 全局写

2. 书P197 SimplePreferenceDemo

3. /res/raw 和 /res/xml 目录中的原始格式文件和 XML 文件:
原始格式文件可以是任何格式的文件,例如视频格式文件、音频格式文件、图像文件或数据文件等。在应用程序编译和打包时,/res/raw 目录下的所有文件都会保留原有格式不变。而 /res/xml 目录下一般用来保存格式化数据的 XML 文件,则会在编译和打包时将 XML 文件转换为二进制格式,用以降低存储器空间占用率和提高访问效率,在应用程序运行的时候会以特殊的方式进行访问。

4. SQLite 手动建库的常用 SQL 命令

.exit 退出 sqlite3
.tables 显示当前数据库中的所有表
.schema (表名) 查看建立表时使用的 SQL 命令
.mode column 更改结果输出格式(column、csv、html、insert、line、list、tabs、tcl)
.help 查询 sqlite3 的命令列表

5. 书P215 DBAdapter P216 DBOpenHelper P221SQLiteDemo

6. Cursor 类的作用及其常用方法

  • 数据集的指针,这个指针就是 Cursor 类。
  • Cursor 类支持在查询结果的数据集合中以多种方式移动,并能够获取数据集合的属性名称和序号。
  • 常用方法:
    Android学习之期末复习重点整理_第6张图片

7. ContentProvider 的定义、特点及作用:

  • ContentProvider(数据提供者)是应用程序之间共享数据的一种接口机制
  • 调用者不能直接调用 ContentProvider 的接口函数,而需要使用 ContentResolver 对象,通过 URI 间接调用 ContentProvider ;ContentProvider 完全屏蔽数据提供组件的数据存储方法;ContentProvider 的数据集类似于数据库的数据表,每行是一条记录,每列具有相同的数据类型。
  • ContentProvider 提供了更为高级的数据共享方法,应用程序可以指定需要共享的数据,而其他应用程序则可以在不知道数据来源、路径的情况下,对共享数据进行查询、添加、删除和更新等操作。

8. 创建 ContentProvider 的步骤:

  • 继承 ContentProvider ,并重载六个函数;
  • 声明 CONTENT_URI ,实现 UriMatcher
  • 注册 ContentProvider

9. 继承 ContentProvider 所需要重载的六个函数是什么?

  • onCreate(); 一般用来初始化底层数据集和建立数据连接等工作。
  • getType(); 返回指定 URI 的 MIME 数据类型。
  • insert();delete();query();update(); 增、删、查、改

10. ContentResolver 的作用,和它的 CRUD 操作?

  • 调用者不能直接调用 ContentProvider 的接口函数,而需要使用 ContentResolver 对象,通过 URI 间接调用 ContentProvider ;调用 getContentResolver(); 函数获取 ContentResolver 对象。
  • 查询操作
String KEY_ID = "_id";
String KEY_NAME = "name";
String KEY_AGE = "age";
String KEY_HEIGHT = "height";
//查询 ID 为2的数据
Uri uri = Uri.parse(CONTENT_URI_STRING+"/"+"2");
Cursor cursor = resolver.query(uri,new String[]{KEY_ID,KEY_NAME,KEY_AGE,KEY_HEIGHT},null,null,null);
//查询全部数据
Uri uri = Uri.parse(CONTENT_URI);
Cursor cursor = resolver.query(uri,new String[]{KEY_ID,KEY_NAME,KEY_AGE,KEY_HEIGHT},null,null,null);
  • 添加操作
//使用 insert() 函数,添加一条数据
ContentValues values = new ContentValues();
values.put(KEY_NAME,"Tom");
values.put(KEY_AGE,21);
values.put(KEY_HEIGHT,1.81f);
Uri newUri = resolver.insert(CONTENT_URI,values);
//使用 bultInsert() 函数,批量添加数据
ContentValues[] arrayValues = new ContentValues[10];
...//实例化每一个 ContentValues
int count = resolver.bultInsert(CONTENT_URI,arrayValues);
  • 删除操作
//删除单条数据
Uri uri = Uri.parse(CONTENT_URI_STRING+"/"+"2");
int result = resolver.delete(uri,null,null);
//删除多条数据或指定条件的数据
String selection = KEY_ID+">4";
int result = resolver.delete(CONTENT_URI,selection,null);
  • 更新操作
//更新指定 ID 的数据,也可以如同删除操作在 selection 中声明更新条件
ContentValues values = new ContentValues();
values.put(KEY_NAME,"Tom");
values.put(KEY_AGE,21);
values.put(KEY_HEIGHT,1.81f);
Uri uri = Uri.parse(CONTENT_URI_STRING+"/"+"2");
int result = resolver.update(uri,values,null,null);

整理自《Android应用程序开发(第3版)》王向辉 张国印 沈洁 编著

你可能感兴趣的:(Android,学习,期末复习总结,Android知识要点,Android知识点整理)