android期末考试总结 本文关键词:期末考试,android
android期末考试总结 本文简介:1.Android的四大组件是哪些。它们的作用。答:ActivityserviceContentProviderBroadCastReceiverActivity是Android程序与用户交互的窗口,是Android构造块中最基本的一种,它需要为保持各界面的状态,做很多持久化的事情,妥善管理生命周期
android期末考试总结 本文内容:
1.
Android的四大组件是哪些。它们的作用。
答:Activity
service
Content
Provider
BroadCastReceiver
Activity是Android程序与用户交互的窗口,是Android构造块中最基本的一种,它需要为保持各界面的状态,做很多持久化的事情,妥善管理生命周期以及一些跳转逻辑。
Service是后台服务于Activity,封装有一个完整的功能逻辑实现,接受上层指令,完成相关的事物,定义好需要接受的Intent提供同步和异步的接口。
Content
Provider:是Android提供的第三方应用数据的访问方案,可以派生Content
Provider类,对外提供数据,可以像数据库一样进行选择排序,屏蔽内部数据的存储细节,向外提供统一的接口模型,大大简化上层应用,对数据的整合提供了更方便的途径。
BroadCast
Receiver:接受一种或者多种Intent作触发事件,接受相关消息,做一些简单处理,转换成一条Notification,统一了Android的事件广播模型
2安卓项目的目录结构,命名及含义。
·
src源文件:使用java语言编写的代码,包括各种Activity的实现。
·
R.java:由eclipse自动生成,包含了应用程序所使用到的资源ID。
·
Android
library:Android库文件。
·
assets:放置多媒体文件等。
·
res:应用程序所需的资源文件,如图标,动画,颜色等。
·
drawable:图片资源
·
layout:描述了Activity的布局。
·
values:定义字符串,颜色等
·
Android
Manifest.xml:应用程序的配置文件。在该文件中声明应用程序的名称,使用到的Activity,Service,Receive,权限等。
AndroidManfest.xml分析
manifest
根节点,描述了package中所有的内容
xmlns:android
包含命名空间的声明。
xmlns:android=http://schemas.
android.com/apk/res/android,使得
Android中各种标准属性能在文件中使用,
提供了大部分元素中的数据
Package
声明应用程序包
application
包含package中application级别组件声
明的根节点。此元素也可包含application
的一些全局和默认的属性,如标签、icon、
主题、必要的权限,等等。一个manifest
能包含零个或一个此元素(不能大余一个)
android:icon
应用程序图标
android:label
应用程序名字
Activity
用来与用户交互的主要工具。Activity是用
户打开一个应用程序的初始页面,大部分
被使用到的其他页面也由不同的activity所
实现,并声明在另外的activity标记中。
注意,每一个activity必须有一个
标记对应,无论它给外部使用或是只用于
自己的package中。如果一个activity没有
对应的标记,你将不能运行它。另外,
为了支持运行时查找Activity,可包含一个
或多个元素来描述activity所支持的操作
android:name
应用程序默认启动的activity
intent-filter
声明了指定的一组组件支持的Intent值,从
而形成了IntentFilter。除了能在此元素下指
定不同类型的值,属性也能放在这里来描
述一个操作所需的唯一的标签、icon和其他信息
action
组件支持的Intent
action
category
组件支持的Intent
Category。这里指定
了应用程序默认启动的activity
uses-sdk
该应用程序所使用的sdk版本相关
3.activity中onCreate()方法的用法
Activity中有一个名称叫onCreate的方法。该方法是在Activity创建时被系统调用,是一个Activity生命周期的开始。
4.android中是如何访问布局的。
LinearLayout线性布局;AbsoluteLayout绝对布局;TableLayout表格布局;RelativeLayout相对布局;FrameLayout帧布局;
LinearLayout(线性布局)提供了控件水平垂直排列的模型,同时可以通过设置子控件的weight布局参数控制各个控件在布局中的相对大小。水平(vertical)垂直(horizontal)
AbsoluteLayout(坐标布局)可以让子元素指定准确的x/y坐标值,并显示在屏幕上。(0,0)为左上角,当向下或向右移动时,坐标值将变大。AbsoluteLayout没有页边框,允许元素之间互相重叠(尽管不推荐)。我们通常不推荐使用AbsoluteLayout,除非你有正当理由要使用它,因为它使界面代码太过刚性,以至于在不同的设备上可能不能很好地工作。
Android:layout_x/layout_y=”56px”确定控件位置
RelativeLayout(相对布局)允许子元素指定他们相对于其它元素或父元素的位置(通过ID指定)。因此,你可以以右对齐,或上下,或置于屏幕中央的形式来排列两个元素。元素按顺序排列,因此如果第一个元素在屏幕的中央,那么相对于这个元素的其它元素将以屏幕中央的相对位置来排列。如果使用XML来指定这个layout,在你定义它之前,被关联的元素必须定义。
FrameLayout(单帧布局)是最简单的一个布局对象。它被定制为你屏幕上的一个空白备用区域,之后你可以在其中填充一个单一对象
—
比如,一张你要发布的图片。所有的子元素将会固定在屏幕的左上角;你不能为FrameLayout中的一个子元素指定一个位置。后一个子元素将会直接在前一个子元素之上进行覆盖填充,把它们部份或全部挡住(除非后一个子元素是透明的)。
TableLayout(表格布局)以行列的形式管理子控件,每一行为一个TableRow的对象,TableRow也可以添加子控件
android:collapseColumns=“n”隐藏TableLayout里面的TableRow的列n
android:stretchColumns=“n”设置列n为可延伸的列
android:shrinkColumns=“n”设置列n为可收缩的列
5main.xml中的一段代码,每一项的含义
android:id
//这个xml属性是继承自android.view类的xml属性。它为framelayout提供一个唯一识别符号,之后,程序要用到它时可以用View.findViewById()
或Activity.findViewById()来找到它。
android:layout_width:
布局宽
android:layout_height:
布局高
//它们的取值是fill_parent或wrap_content。
fill_parent
:在x轴或则y轴上充满父容器的空间。
wrap_content
:framelayout里的元素有多少宽高就多少宽高,
//这两个属性都是定义在android.widget.FrameLayout的嵌套类android.widget.FrameLayout.LayoutParams里。
android:background:背景
android:foreground
:前景
6.数据存储的五种方法分别是什么?
答:1
使用SharedPreferences存储数据;
2
文件存储数据;3
SQLite数据库存储数据;
4
使用ContentProvider存储数据;
5
网络存储数据;
7文件保存操作,代码怎么写,SDk读写权限?
答:文件存储数据
文件存储方式是一种较常用的方法,在Android中读取/写入文件的方法,与
Java中实现I/O的程序是完全一样的,提供了openFileInput()和openFileOutput()方法来读取设备上的文件。具体实例如下:
String
fn
=
“moandroid.log”;
FileInputStream
fis
=
openFileInput(fn);
FileOutputStream
fos
=
openFileOutput(fn,Context.MODE_PRIVATE
android中关于对文件SD卡以及手机本身内存中建立文件保存等操作
使用File进行存储操作主要使用到以下的
①:public
abstract
FileInputStream
openFileInput
(String
name)
这个主要是打开文件,返回FileInputStream
②:public
abstract
FileOutputStream
openFileOutput
(String
name,int
mode)
这个主要是写入文件,如果该文件不存在,直接进行创建,返回FileOutputStream
Mode(主要有以下的四种的模式)
MODE_APPEND
//在尾部追加
MODE_PRIVATE
//私有
MODE_WORLD_READABLE
//可读
MODE_WORLD_WRITEABLE
//可写
③:FileInputStream(获取文件输入流)与FileOutputStream
(获取文件输出流)这两类在JavaIO
操作中很常见
接下来进行操作
保存成功之后讲文件保存在当前应该程序的包名下的files/(可以改变存储的其他路径)
源代码如下:
[java]
view
plaincopyprint?
1.
package
com.jiangqq.file;
2.
3.
import
java.io.FileInputStream;
4.
import
java.io.FileOutputStream;
5.
6.
import
android.app.Activity;
7.
import
android.os.Bundle;
8.
import
android.view.View;
9.
import
android.view.View.OnClickListener;
10.
import
android.widget.Button;
11.
import
android.widget.EditText;
12.
import
android.widget.Toast;
13.
14.
public
class
FileAcitivy
extends
Activity
15.
{
16.
private
Button
bt1,bt2;
17.
private
EditText
et1,et2;
18.
19.
private
static
final
String
FILENAME
=
“temp_file.txt“;
20.
21.
@Override
22.
public
void
onCreate(Bundle
savedInstanceState)
{
23.
super.onCreate(savedInstanceState);
24.
setContentView(R.layout.main);
25.
bt1
=
(Button)
this.findViewById(R.id.bt1);
26.
bt2
=
(Button)
this.findViewById(R.id.bt2);
27.
et1
=
(EditText)
this.findViewById(R.id.et1);
28.
et2
=
(EditText)
this.findViewById(R.id.et2);
29.
bt1.setOnClickListener(new
OnClickListener()
{
30.
31.
@Override
32.
public
void
onClick(View
v)
{
33.
write(et1.getText().toString());
34.
Toast.makeText(FileAcitivy.this,“文件写入成功“,Toast.LENGTH_LONG)
35.
.show();
36.
}
37.
});
38.
bt2.setOnClickListener(new
OnClickListener()
{
39.
40.
@Override
41.
public
void
onClick(View
v)
{
42.
et2.setText(read());
43.
Toast.makeText(FileAcitivy.this,“文件读出成功“,Toast.LENGTH_LONG)
44.
.show();
45.
}
46.
});
47.
}
48.
49.
//
读文件方法
50.
private
String
read()
{
51.
try
{
52.
FileInputStream
inputStream
=
openFileInput(FILENAME);
53.
byte[]
b
=
new
byte[inputStream.available()];
54.
inputStream.read(b);
55.
return
new
String(b);
56.
}
catch
(Exception
e)
{
57.
}
58.
return
null;
59.
}
60.
61.
//
写文件
62.
private
void
write(String
content)
{
63.
try
{
64.
FileOutputStream
fos
=
openFileOutput(FILENAME,MODE_APPEND);
65.
fos.write(content.getBytes());
66.
fos.close();
67.
}
catch
(Exception
e)
{
68.
}
69.
}
70.
}
文件可以保存在手机内存中,也可以保存在SD卡上面,保存在SD卡上要申请读写SDS卡权限,权限如下:
①保存在手机上
[html]
view
plaincopyprint?
1.
public
void
saveFile(String
fileName,String
contentStr)
throws
IOException{
2.
FileOutputStream
fileOutputStream=context.openFileOutput(fileName,Context.MODE_PRIVATE);
3.
fileOutputStream.write(contentStr.getBytes());
4.
}
public
void
saveFile(String
fileName,String
contentStr)
throws
IOException{
FileOutputStream
fileOutputStream=context.openFileOutput(fileName,Context.MODE_PRIVATE);
fileOutputStream.write(contentStr.getBytes());
}
②保存在SD卡上
[html]
view
plaincopyprint?
1.
public
void
savefile2SD(String
fileNameStr,String
contentStr)
throws
FileNotFoundException
{
2.
File
file=new
File(Environment.getExternalStorageDirectory(),fileNameStr);
3.
OutputStream
oStream=new
FileOutputStream(file);
4.
byte[]
data=contentStr.getBytes();
5.
try
{
6.
oStream.write(data);
7.
}
catch
(IOException
e)
{
8.
//
TODO
Auto-generated
catch
block
9.
e.printStackTrace();
10.
}
11.
finally{
12.
try
{
13.
oStream.close();
14.
}
catch
(IOException
e)
{
15.
//
TODO
Auto-generated
catch
block
16.
e.printStackTrace();
17.
}
18.
19.
}
20.
}
关于界面,以前见到淘宝上面输入框里面有提示文字,然后鼠标点进去后文字消失,等待用户输入的效果
[html]
view
plaincopyprint?
1.
android:hint=“请输入文件名称“------就是这样一行代码
还有就是要注意一下:在模拟器上面如果输入中文的话,那么保存后就有乱码,保存文件后导出到PC的话会发现找不到该文件
8.android中数据库事物怎么定义?
答:实现Android数据库事务非常简单,只需要使用SQLiteDatabase类的三个方法即可。
beginTransaction();
setTransactionSuccessful();
endTransaction();
当调用endTransaction()时,所有从beginTransaction()开始的操作都会被提交。
一个简单的数据库事务操作如下所示:
1.
mDatabase.beginTransaction();
2.
try{
3.
//在这里执行多个数据库操作
4.
//执行过程中可能会抛出异常
5.
mDatabase.setTransactionSuccessful();
6.
//在setTransactionSuccessful和endTransaction之间不进行任何数据库操作
7.
}catch(Exception
e){
8.
//当数据库操作出现错误时,需要捕获异常,结束事务
9.
mDatabase.endTransaction();
10.
throw
e;
11.
}
12.
//当所有操作执行完成后结束一个事务
13.
mDatabase.endTransaction();
14.
}
9.android中网络读取的几种方式是什么?
答:get
post
HttpClient
HttpURLConnection:
java.net包中的HttpURLConnection类Get方式。
1.
//
Get方式请求
2.
public
static
void
requestByGet()
throws
Exception
{
3.
String
path
=
“https://reg.163.com/logins.jsp?id=helloworld
4.
//
新建一个URL对象
5.
URL
url
=
new
URL(path);
6.
//
打开一个HttpURLConnection连接
7.
HttpURLConnection
urlConn
=
(HttpURLConnection)
url.openConnection();
8.
//
设置连接超时时间
9.
urlConn.setConnectTimeout(5
1000);
10.
//
开始连接
11.
urlConn.connect();
12.
//
判断请求是否成功
13.
if
(urlConn.getResponseCode()
==
HTTP_200)
{
14.
//
获取返回的数据
15.
byte[]
data
=
readStream(urlConn.getInputStream());
16.
Log.i(TAG_GET,“Get方式请求成功,返回数据如下:“);
17.
Log.i(TAG_GET,new
String(data,“UTF-8“));
18.
}
else
{
19.
Log.i(TAG_GET,“Get方式请求失败“);
20.
}
21.
//
关闭连接
22.
urlConn.disconnect();
23.
}
Post方式:
[java]
view
plaincopyprint?
1.
//
Post方式请求
2.
public
static
void
requestByPost()
throws
Throwable
{
3.
String
path
=
“https://reg.163.com/logins.jsp“;
4.
//
请求的参数转换为byte数组
5.
String
params
=
“id=“+
URLEncoder.encode(“helloworld“,“UTF-8“)
6.
+
“7.
byte[]
postData
=
params.getBytes();
8.
//
新建一个URL对象
9.
URL
url
=
new
URL(path);
10.
//
打开一个HttpURLConnection连接
11.
HttpURLConnection
urlConn
=
(HttpURLConnection)
url.openConnection();
12.
//
设置连接超时时间
13.
urlConn.setConnectTimeout(5
1000);
14.
//
Post请求必须设置允许输出
15.
urlConn.setDoOutput(true);
16.
//
Post请求不能使用缓存
17.
urlConn.setUseCaches(false);
18.
//
设置为Post请求
19.
urlConn.setRequestMethod(“POST“);
20.
urlConn.setInstanceFollowRedirects(true);
21.
//
配置请求Content-Type
22.
urlConn.setRequestProperty(“Content-Type“,23.
“application/x-www-form-urlencode“);
24.
//
开始连接
25.
urlConn.connect();
26.
//
发送请求参数
27.
DataOutputStream
dos
=
new
DataOutputStream(urlConn.getOutputStream());
28.
dos.write(postData);
29.
dos.flush();
30.
dos.close();
31.
//
判断请求是否成功
32.
if
(urlConn.getResponseCode()
==
HTTP_200)
{
33.
//
获取返回的数据
34.
byte[]
data
=
readStream(urlConn.getInputStream());
35.
Log.i(TAG_POST,“Post请求方式成功,返回数据如下:“);
36.
Log.i(TAG_POST,new
String(data,“UTF-8“));
37.
}
else
{
38.
Log.i(TAG_POST,“Post方式请求失败“);
39.
}
40.
}
org.apache.http包中的HttpGet和HttpPost类
Get方式:
[java]
view
plaincopyprint?
1.
//
HttpGet方式请求
2.
public
static
void
requestByHttpGet()
throws
Exception
{
3.
String
path
=
“https://reg.163.com/logins.jsp?id=helloworld
4.
//
新建HttpGet对象
5.
HttpGet
httpGet
=
new
HttpGet(path);
6.
//
获取HttpClient对象
7.
HttpClient
httpClient
=
new
DefaultHttpClient();
8.
//
获取HttpResponse实例
9.
HttpResponse
httpResp
=
httpClient.execute(httpGet);
10.
//
判断是够请求成功
11.
if
(httpResp.getStatusLine().getStatusCode()
==
HTTP_200)
{
12.
//
获取返回的数据
13.
String
result
=
EntityUtils.toString(httpResp.getEntity(),“UTF-8“);
14.
Log.i(TAG_HTTPGET,“HttpGet方式请求成功,返回数据如下:“);
15.
Log.i(TAG_HTTPGET,result);
16.
}
else
{
17.
Log.i(TAG_HTTPGET,“HttpGet方式请求失败“);
18.
}
19.
}
Post方式:
[java]
view
plaincopyprint?
1.
//
HttpPost方式请求
2.
public
static
void
requestByHttpPost()
throws
Exception
{
3.
String
path
=
“https://reg.163.com/logins.jsp“;
4.
//
新建HttpPost对象
5.
HttpPost
httpPost
=
new
HttpPost(path);
6.
//
Post参数
7.
List
params
=
new
ArrayList();
8.
params.add(new
BasicNameValuePair(“id“,“helloworld“));
9.
params.add(new
BasicNameValuePair(“pwd“,“android“));
10.
//
设置字符集
11.
HttpEntity
entity
=
new
UrlEncodedFormEntity(params,HTTP.UTF_8);
12.
//
设置参数实体
13.
httpPost.setEntity(entity);
14.
//
获取HttpClient对象
15.
HttpClient
httpClient
=
new
DefaultHttpClient();
16.
//
获取HttpResponse实例
17.
HttpResponse
httpResp
=
httpClient.execute(httpPost);
18.
//
判断是够请求成功
19.
if
(httpResp.getStatusLine().getStatusCode()
==
HTTP_200)
{
20.
//
获取返回的数据
21.
String
result
=
EntityUtils.toString(httpResp.getEntity(),“UTF-8“);
22.
Log.i(TAG_HTTPGET,“HttpPost方式请求成功,返回数据如下:“);
23.
Log.i(TAG_HTTPGET,result);
24.
}
else
{
25.
Log.i(TAG_HTTPGET,“HttpPost方式请求失败“);
26.
}
27.
}
简答
.简述Android平台提供了那些数据存储方法。
答:Preferences、
File、
SQLite、
ContentProvider,网络
Android整体认知(安卓系统结构,项目的运行)
答:图我们可以从整体上有个大致的了解(图片来源互联网):
从上图中可以看出,Android系统架构为四层结构,从上层到下层分别是应用程序层、应用程序框架层、系统运行库层以及Linux内核层,分别介绍如下:
1)应用程序层
Android平台不仅仅是操作系统,也包含了许多应用程序,诸如SMS短信客户端程序、电话拨号程序、图片浏览器、Web浏览器等应用程序。这些应用程序都是用Java语言编写的,并且这些应用程序都是可以被开发人员开发的其他应用程序所替换,这点不同于其他手机操作系统固化在系统内部的系统软件,更加灵活和个性化。
2)应用程序框架层
应用程序框架层是我们从事Android开发的基础,很多核心应用程序也是通过这一层来实现其核心功能的,该层简化了组件的重用,开发人员可以直接使用其提供的组件来进行快速的应用程序开发,也可以通过继承而实现个性化的拓展。
a)
Activity
Manager(活动管理器)
管理各个应用程序生命周期以及通常的导航回退功能
b)
Window
Manager(窗口管理器)
管理所有的窗口程序
c)
Content
Provider(内容提供器)
使得不同应用程序之间存取或者分享数据
d)
View
System(视图系统)
构建应用程序的基本组件
e)
Notification
Manager(通告管理器)
使得应用程序可以在状态栏中显示自定义的提示信息
f)
Package
Manager(包管理器)
Android系统内的程序管理
g)Telephony
Manager(电话管理器)
管理所有的移动设备功能
h)Resource
Manager(资源管理器)
提供应用程序使用的各种非代码资源,如本地化字符串、图片、布局文件、颜色文件等
i)Location
Manager(位置管理器)
提供位置服务
j)XMPP
Service(XMPP服务)
提供Google
Talk服务
3)系统运行库层
从图中可以看出,系统运行库层可以分成两部分,分别是系统库和Android运行时,分别介绍如下:
a)系统库
系统库是应用程序框架的支撑,是连接应用程序框架层与Linux内核层的重要纽带。其主要分为如下几个:
?
Surface
Manager:
执行多个应用程序时候,负责管理显示与存取操作间的互动,另外也负责2D绘图与3D绘图进行显示合成。
?
Media
Framework:
多媒体库,基于PacketVideo
OpenCore;支持多种常用的音频、视频格式录制和回放,编码格式包括MPEG4、MP3、H.264、AAC、ARM。
?
SQLite:
小型的关系型数据库引擎
?
OpenGL|ES:
根据OpenGL
ES
1.0API标准实现的3D绘图函数库
?
FreeType:
提供点阵字与向量字的描绘与显示
?
WebKit:
一套网页浏览器的软件引擎
?
SGL:
底层的2D图形渲染引擎
?
SSL:
在Andorid上通信过程中实现握手
?
Libc:
从BSD继承来的标准C系统函数库,专门为基于embedded
linux的设备定制
b)Android运行时
Android应用程序时采用Java语言编写,程序在Android运行时中执行,其运行时分为核心库和Dalvik虚拟机两部分。
?
核心库
核心库提供了Java语言API中的大多数功能,同时也包含了Android的一些核心API,如android.os、android.net、android.media等等。
?
Dalvik虚拟机
Android程序不同于J2me程序,每个Android应用程序都有一个专有的进程,并且不是多个程序运行在一个虚拟机中,而是每个Android程序都有一
个Dalivik虚拟机的实例,并在该实例中执行。Dalvik虚拟机是一种基于寄存器的Java虚拟机,而不是传统的基于栈的虚拟机,并进行了内存资源使用的优化
以及支持多个虚拟机的特点。需要注意的是,不同于J2me,Android程序在虚拟机中执行的并非编译后的字节码,而是通过转换工具dx将Java字节码转成dex格
式的中间码。
4)Linux内核层
Android是基于Linux2.6内核,其核心系统服务如安全性、内存管理、进程管理、网路协议以及驱动模型都依赖于Linux内核。
在安卓中整个文件在网络上传下载的全过程
答:下载步骤:
1.创建一个URL对象
2.通过URL对象,创建一个HttpURLConnection对象
3.得到InputStream
4.从InputStream当中读取数据
Android端实现文件上传
1)、新建一个Android项目命名为androidUpload
2)、新建FormFile类,用来封装文件信息
3)、新建SocketHttpRequester类,封装上传文件到服务器代码
5)、修改清单文件
二、服务器端用来获取Android端上传过来的文件信息
1)、新建一个web项目命名为upload,
2)、新建action类,命名为UploadAction
3)、配置struts.xml
4)、配置web.xml
21