android期末总结新1

填空

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分析

3.activity中onCreate()方法的用法

Activity中有一个名称叫onCreate的方法。该方法是在Activity创建时被系统调用,是一个Activity生命周期的开始。

4android中是如何访问布局的。

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.数据存储的五种方法分别是什么?

答:使用SharedPreferences存储数据;  2 文件存储数据;3 SQLite数据库存储数据;使用ContentProvider存储数据;网络存储数据;

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卡以及手机本身内存中建立文件保存等操作

<!-- 在SDCard中创建与删除文件权限 -->
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/>
<!-- 往SDCard写入数据权限 -->
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

使用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卡权限,权限如下:

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"></uses-permission>

①保存在手机上

[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.  <EditText  

2.      android:id="@+id/fileNameID"  

3.      android:layout_width="match_parent"  

4.      android:layout_height="wrap_content"   

5.      android:hint="请输入文件名称">  

    <EditText

        android:id="@+id/fileNameID"

        android:layout_width="match_parent"

        android:layout_height="wrap_content"

        android:hint="请输入文件名称">

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&pwd=android";  

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.              + "&pwd=" + URLEncoder.encode("android", "UTF-8");  

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&pwd=android";  

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<NameValuePair> params = new ArrayList<NameValuePair>();  

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

相关推荐