选择题 15×2 30分 填空题 10×2 20分 简答题 5×4 20分 程序填空题 15×2 30分
Android 采用了软件堆层的架构,共分4层:
1. Android 平台的 Eclipse 开发环境搭建步骤:
3. SDK 中英文全称
SDK:Android 软件开发工具包(Android Software Development Kit)
4. ADB中英文全称及作用
ADB:Android 调试桥(Android Debug Bridge)
ADB 是用于连接 Android 设备或模拟器的工具,负责将应用程序安装到模拟器和设备中,或从模拟器或设备中传输文件。
1. AVD 中英文全称
AVD:Android 虚拟设备(Android Virtual Device)
2. Android程序结构核心目录里分别存放什么内容?
3. R.java 的作用
R.java 文件是 ADT 自动生成的文件,包含对 drawable、layout 和 values 目录内的资源的引用指针,Android 程序能够直接通过 R 类引用目录中的资源。
4. AndroidManifest.xml作用
AndroidManifest.xml 是 XML 格式的 Android 程序声明文件,包含了 Android 系统运行 Android 程序前所必须掌握的重要信息。
1. Android 生命周期有哪5个进程?分别在何时执行或撤销?优先级分别是什么?
2. Android 系统四大组件的名称、概念及其作用
Activity 活动。 是 Android 程序的呈现层,显示可视化的用户界面,并接收与用户交互所产生的界面事件。
Service 服务。 一般用于没有用户界面,但需要长时间在后台运行的应用。
Broadcast Receiver 广播接收器。 用来接收并响应广播消息的组件。
Content Provider 内容提供者。 Android 系统提供的一种标准的共享数据的机制,应用程序可以通过 Content Provider 访问其他应用程序的私有数据。
3. Activity 四种状态
4. Activity 的生命周期及其事件回调函数
5. 书P72 ActivityLifeCycle 示例
6. Logcat 有哪几种日志类型?级别是什么?这几种日志的调用代码?
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,它的作用是什么?
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 如何配置?
<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 解析的匹配规则是什么?
8. 书P158 BroadcastReceiverDemo
1. Service 的两种生命周期的名称、定义:
2. 启动方式使用 service 需要使用什么函数、它的特点?
3. 绑定方式使用 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,参数传递类型有哪些?
9. 远程服务的创建和调用需要使用 AIDL 语言,它的步骤是什么?
1. SharedPreferences 的特点,三种访问模式:
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 类的作用及其常用方法
7. ContentProvider 的定义、特点及作用:
8. 创建 ContentProvider 的步骤:
9. 继承 ContentProvider 所需要重载的六个函数是什么?
10. ContentResolver 的作用,和它的 CRUD 操作?
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);