好好学习,天天向上,学科吧欢迎您!
当前位置:首页 >> 总结 >> 考试总结 内容页

android期末考试总结

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

TAG标签: