GuoXin Li's Blog

Android_learning_record

字数统计: 7.3k阅读时长: 26 min
2018/12/31 Share

Android Leanrning_record

一、Android 概述

Android 的优点

  • 系统的开放性和免费性
  • 移动互联网的发展
  • 相关厂商的大力支持

Android 的挑战

  • 用户体验不一致,安全性有待提高
  • 技术的进一步完善
  • 开放手机联盟的挑战
  • 其他技术的竞争

Android 平台的技术架构

四部分:

  1. Linux 内核层
  2. 中间层
  3. 应用程序框架
  4. 应用层

Android 应用程序构成

  1. 活动(Activity)

    活动是最基本的 Android 应用程序组件。在应用程序中,一个活动通常是一个单独的屏幕。每个活动都通过继承活动基类而被实现为一个独立的活动类。

  2. 意图(Intent)

    意图用来描述应用程序的功能。利用消息实现应用程序间的交互机制,并能够在程序运行中连接两个不同的组件。Intent 描述了应用中一次操作的动作、数据以及附加数据,向 Android 表达某种请求或者意愿。

  3. 服务(Service)

    服务(Service)是 Android 应用程序中具有较长生命周期但是没有用户界面的程序。它在后台运行,并且可以与其他程序进行交互。

  4. 内容提供器(ContentProvider)

    Android 应用程序可以使用文件或 SQLite 数据库来存储数据。内容提供器提供了一种多应用间数据共享的方式。当某个应用程序的数据需要与其他应用程序共享时,内容提供器就会发挥作用。

二、活动(Activity)

概述:

Activity 是 Android 应用程序中最基本的组成单位。Activity 主要负责创建显示窗口,一个 Activity 对象通常就代表了一个单独的屏幕。在 Android 应用中,如果需要有显示的界面,应用中至少要包含一个 Activity 类。在具体实现时,每个 Activity 都被定义为一个独立的类,并且继承 Android 提供的 android.app.Activity。例如:

1
2
3
4
5
import android.app.Activity;
import android.os.Bundle;
public class MyActivity extends Activity{
……
}

Activity 生命周期

Android 生命周期过程中的四种状态:

  1. 激活或者运行状态:此时 Activity 运行在屏幕的前台
  2. 暂停状态:此时 Activity 失去了焦点但是仍然对用户可见,例如在改 Activity 上遮挡了一个透明的或者非全屏的 Activity
  3. 停止状态:此时 Activity 被其他的 Activity 完全覆盖
  4. 终止状态:此时 Activity 会被系统清理出内存

Activity 类中的7各方法定义了 Activity 完整的生命周期

  1. onCreate():Activity 初次创建时被调用,该方法一般进行一些静态设置,如创建 View 视图、进行数据绑定等。如果 Activity 是首次创建,本方法执行完后会将调用 onStart(),如果 Activity 是停止后重新显示则调用 onRestart()。下一个方法:onStart()或 onRestart()
  2. onStart():当 Activity 对用户即将可见的时候调用。下一个方法:onRestart()或 onResume()

  3. onRestart():当 Activity 从停止状态重启启动时调用,下一个方法 Resume()

  4. onResume():当 Activity 将要与用户交互时调用此方法,此时 Activity 在 Activity 栈的栈顶,用户输入的信息可以传递给它,如果其他 Activity 在它的上方恢复显示,则调用 onPause(),下一个方法onPause()
  5. onPause():当系统要启动一个其他的 Activity 时(其他的 Activity 显示之前),这个方法将被调用,用于提交持久数据的改变、停止动画等。下一个方法 onResume()或 onStop()
  6. onStop():当另一个 Activity 恢复并遮盖住当前的 Activity,导致其对用户不再可见时,这个方法将被调用。下一个方法 onStart()或 onDestroy()
  7. onDestroy():在 Activity 被销毁前所调用的最后一个方法,下一个被调用的方法:无

Activity 生命周期

  1. 完整生命期:从 Activity 最初调用 onCreate()方法到最终调用 onDestroy()方法的真个过程称为完整的生命周期。
  2. 可见生命周期:从 Activity 调用 onStart()方法开始,到调用对应的 onStop()方法为止。
  3. 前台生命周期:从 Activity 调用 onResume()方法开始,到调用对应的 onPause()方法为止的这个过程称为前台生命周期,这段时间当前的 Activity 处于其他所有 Activity 的前面,且可以与用户交互。

Android 中的资源使用

  1. res 目录:目录下存放 Android 程序能通过“R”资源类直接访问的资源
  2. assets 目录:存放 Android 程序不能直接访问的资源(原生文件),如MP3文件,必须通过 AssetManager 类以二进制流的形式读取
字符串资源

程序中用到的字符串资源需要在 res/values/strings.xml 文件中定义,在其他资源文件中或代码中都可以访问字符串资源

在其他资源文件中采用“@string/资源名称”的形式访问

图片资源

程序用到的图片资源需要放在 res 文件夹中的 drawable 资源目录下。

在其他资源文件或代码中可以采用“@drawable/资源名称”的形式访问,在代码中可通过“R.drawable.资源名称”的形式访问

第二章小结

  1. Activity 是 Android 应用程序中最基本的组成单位

  2. 大部分的 Android 应用中包含多个 Activity 类

  3. Activity 共有四种状态:激活状态或者运行状态、暂停状态、停止状态、终止状态

  4. 控制 Activity 屏幕横屏显示方式,设置参数“android:screenOrientation”为 landscape 或 portrait

  5. Activity 被系统销毁时,保存必要信息,保证在 Activity 恢复时不被丢失

  6. 每个 Activity 类在定义时都必须要继承“android.app.Activity”

  7. “android.app.Activity”类中的方法定义了 Activity 完整的生命周期

  8. Android 中的资源是指非代码部分,是代码中使用的外部资源

  9. 对于字符串资源,在其他资源文件中使用“@string/资源名称”的形式访问,在代码可通过“R.string.资源名称”的形式访问
  10. 对于图片资源,在其他资源文件中使用“@drawable/资源名称”的形式访问,在代码可通过“R.drawable.资源名称”的形式访问

三、用户界面

用户界面元素分类

  1. 视图组件(View)
  2. 视图容器(ViewGroup)
  3. 布局管理(Layout)

视图组件(View)

Android 的窗体功能室通过 widget(窗体部件)类实现的,而 View 类是 widget的基类。

View 是用户界面的基础元素,View 对象存储了 Android 屏幕上一个特定的矩形区域的布局和内容属性的数据体,通过 View 对象,可实现对布局、绘图、焦点变换、滚动条、屏幕区域的按键、用户交互等功能。

视图容器(ViewGroup)

ViewGroup 是 View 的容器,可将 View 添加到 ViewGroup 中,一个 ViewGroup 也可以加入到另一个 ViewGroup 里。

布局管理(Layout)

Layout 用来管理组件的布局格式,以组织界面中组件的呈现方式。

  1. LinerLayout:线性布局

    该布局中子元素之间成线性排列,即在某一方向上的顺序排列,常见的有水平顺序排列、垂直顺序排列。

    该布局中的子组件按照垂直或者水平方向排列,方向由“android:orientation”属性控制,属性值有垂直(vertical)和水平(horizontal)两种。

  2. RelativeLayout:相对布局

    该布局是一种根据相对位置排列元素的布局方式,这种方式允许子元素指定她们相对于其他元素或父元素的位置(通过 ID 指定)。线性布局不需要特殊的指定其他父元素,而相对布局使用之前必须指定其参照物,只有指定参照物之后,才能定义其相对位置。

  3. TableLayout:表格布局

    该布局将子元素的位置分配到表格的行或列中,即按照表格的顺序排序。表格布局并不是真正意义上的表格,只是按照表格的方式组织元素的布局,元素之间并没有实际表格中的分界线。

  4. AbsoluteLayout:绝对布局

    该布局按照绝对坐标对元素进行布局。与相对布局相反,绝对布局不需要参照物。

  5. FrameLayout:框架布局

    该布局将所有子元素以层叠的方式显示,后加的元素会被放在最顶层,覆盖之前的元素。

  6. GridLayout:网格布局

    该布局能够同时对 X 轴、Y 轴空间进行对齐,大大简化了对复杂布局的处理

事件处理机制

Android 系统中引用 Java 的时间处理机制,包括对事件、事件源和事件监听器三个事件模型:

  1. 事件(Event):是一个描述事件源状态改变的对象,事件不是通过 new 运算符创建的,而是由用户操作触发的。
  2. 事件源(Event source):产生事件的对象,事件源通常是 UI 组件,例如单机按钮,则按钮就是事件源
  3. 事件监听器(Event Listener):当事件产生时,事件监听器用于对该事件进行响应和处理。监听器需要实现监听接口中定义的事件处理方法

对话框和提示信息(Toast)

提示信息(Toast)是 Android 中用来显示提示信息的一种机制,与对话框不同,Toast没有焦点,而且Toast显示时间有限,过一段时间会自动消失。Toast 定义在 android.widget 中。常用方法:

  • Toast(Context context):构造函数
  • setDuration(int duration):设置提示信息显示的时长,可以设置两种值:Toast.LENGTH_LONG 和 Toast.LENGTH.SHORT
  • setText(CharSequence s):设置显示的文本
  • cancel():关闭提示信息,即不显示
  • makeText(Context context,CharSequence text, int duration):该方法是静态方法,用于创建一个带文本的提示信息,并并指明时长
  • show():显示提示信息

对话框

对话框是程序运行中的弹出窗口

  • AlertDialog:提示对话框
  • ProgressDialog:进度对话框
  • DatePickerDialog:日期选择对话框
  • TimePickerDialog:时间选择对话框

常用 widget 组件

WIdget 组件是窗体中使用的部件,都定义在 android.widget 包中,如:

  • 按钮Button
  • 编辑框EditText
  • 复选框CheckBox
  • 单选按钮组RadioGroup
  • 下拉列表Spinner

菜单

菜单式 UI 设计中经常使用的组件,提供了不同功能分组展示的能力,在人机交互中提供了人性化的操作。Android 中菜单分为两种类型:选项菜单(OptionMenu)、上下文菜单(ContextMenu)

ActionBar

ActionBar 的主要元素包括:图标和标题部分、ActionButton、OverFlow、ActionVIew、Tabs

第三章小结

  1. Android 的界面元素主要由 View(视图组件)、ViewGroup(视图容器)和 Layout(布局管理) 部分组成
  2. Android 系统中引用Java 的时间处理机制,包括事件、事件源和事件监听器三个事件模型
  3. Android 中提供了两种创建布局的方式:XML 布局文件和代码直接实现
  4. Android 的布局包含 LinerLayout、RelativeLayout、TableLayout、AbsoluteLayout、FrameLayout 和 GridView 等多种布局
  5. 提示信息(Toast)是 Android 中用来显示提示信息的一种机制,与对话框不同,Toast 没有焦点,而且 Toast 显示时间有限,过一会会自动消失
  6. Android 系统提供了四种对话框:AlterDialog、ProgressDialog、DataPickerDialog 和 TimePickerDialog
  7. 常见的 Widget 组件有:按钮(Button)、文本框(TextView)、编辑框(EditText)、复选框(CheckBox)、单选按钮组(RadioGroup)、下拉列表(Spinner)
  8. Android 的菜单有两种:选项菜单(Options Menus)和上下文菜单(Context Menus)
  9. ActionBar 的主要元素包括:图标和标题部分、ActionButton、OverFlow、ActionView、Tabs

四、意图(Intent)

概述:

Intent 是 Android 的核心组件,它是利用消息实现应用程序间的交互,这种消息描述了应用中一次操作的动作、数据以及附加数据,系统通过该 Intent 的描述负责找到对应的组件,并将 Intent 传递给调用的组件,完成组件的调用。

Intent 组成属性

Intent 由动作、数据、分类、类型、组件和扩展信息等内容组成。

  • Action 属性:

    用于描述 Intent 要完成的动作,并对要执行的动作进行一个简要描述。Intent 类定义了一系列 Action 属性常量,用来表示一套标准动作。

  • Data 属性:

    Data 属性是执行动作的 URIne 和 MIME 类型

  • Category 属性:

    指明一个执行 Action 的分类,Intent 中定义了一系列的 Category 属性常用量。

  • Component 属性:

    用于指明 Intent 的目标组件的类名称。通常 Android 会根据 Intent 中包含的其他属性的信息(比如 Action、Data/Type、Category)进行查找,最终找到一个与之匹配的目标组件。

  • Extra 属性:

    用于添加一些附加信息。例如发送一个邮件,就可以通过 Extra 属性来添加主题(Subject)和内容(Body)

Intent 启动

Android 应用程序的三个核心组件活动(Activity)、广播接收器(Broadcast Receiver)以及服务(Service)都可以通过 Intent 来启动或激活。

Intent 消息传递

Intent 的 Extra 属性用于添加一些附加信息,利用该属性可以进行消息的传递。将传递的信息存放到 Extra 属性中有如下两种方式:

  1. 直接调用 putExtra()方式,该方式是将信息添加到 Extra 属性中,然后通过调用 getXXXExtra()方法进行获取。这种方式比较简单、直接,主要在数据量比较少的情况下使用

  2. 另一种是先数据封装到 Bundle 包中,Bundle 被看成一个“键/值”映射的哈希表,当数据量比较多时,可以使用 Bundle 存放数据,然后通过 putExtras()方法将 Bundle 对象添加到 Extra 属性中,在通过使用 getExtras()方法获取存放的 Bundle 对象,最后读取 Bundle 包中的数据。

    这种方法是间接通过 Bundle 包对数据先进性封装,在进行传递,主要用在数据量较多的情况下使用

Intent Filter

Intent 可以通过显示方式或隐式方式来找到目标组件,显示方式式直接通过设置组件名来实现的,而隐式方式是通过 Intent Filter 过滤来实现的。

Android 提供了两种生成 Intent Filter 方式:

  1. 通过 IntentFilter 类生成
  2. 通过在配置文件 AndroidManifest.xml 中定义元素生成的

广播接收Intent

通常广播 Intent 用于向监听器通知系统事件或应用程序事件,从而扩展应用程序间的事件驱动的编程模型

实现广播和接收 Intent 机制包含四个步骤:

  • 注册相应的广播接收器(Broadcast Receiver)

  • 发送广播

    Activity 的 sendBroadcast()、sendOrderBroadcast()和 sendStrikyBroadcast()方法都可以广播 Intent 到广播接收器,满足条件的 BroadcastReceiver 都会执行 onReceiver 方法。

  • 满足条件的广播接收器执行接收方法 onReceiver()。

  • 销毁广播接收器。

简述 Intent 的过滤机制

主要用来过滤隐式意图。当用户进行一项操作的时候,Android系统会根据配置的 “意图过滤器” 来寻找可以响应该操作的组件,服务。一种是通过 IntentFilter 类生成,另一种是通过在 AndroidManifest.xml 文件中定义元素生成

简述 Android 广播机制的作用

  1. 通常广播Intent 用于向监听器通知系统事件或应用程序事件,从而扩展应用程序间的事件驱动的编程模型
  2. 广播 Intent可以使应用程序更加开放,使用 Intent 来广播事件,可以使在原应用程序不发生改变的情况下,对事件做出响应
  3. Android 中大量使用广播 Intent 来广播系统事件,例如电池电量、系统时间和来电

本章小结

  1. Intent 由动作、数据、分类、类型、组件和扩展信息等内容组成
  2. Action 属性用于描述 Intent 要完成的动作,对要执行的动作进行一个简要描述
  3. Intent 的 Data 属性是执行动作的 URI 和 MIME 类型
  4. Category 属性指明一个执行 Action 的分类
  5. component 属性用于指明 Intent 的目标组件的类名称
  6. Extra 属性用于添加一些附加信息
  7. 多 Activity 的 Android 应用程序可通过 starActivity()方法指定相应的 Intent 对象来启动另外一个 Activity
  8. Intent 的 Extra 属性用于 添加一些附加信息,利用该属性可以进行消息的传递
  9. 将传递的信息存放到 Extra 属性中有如下两种方式:一种是直接将信息添加到 Extra 属性中,另一种是将数据封装到 Bundle 包中
  10. Intent 可以通过显示方式或者隐士方式找到目标组件,显示方式是直接通过设置组件名来实现的,而隐士方式是通过 Intent Filter 过滤来实现的
  11. 在 AndroidManifest.xml 配置文件中,Intent Filter 以元素来指定。一个组件中可以有多个元素,每个元素描述不同的能力
  12. 广播接收器(Broadcast Receiver)是接受广播消息并对消息做出反应的组件
  13. Activity 的 sendBroadcast()、sendOrderBroadcast()和 sendStrikyBroadcast()方法都可以广播 Intent 到广播接收器

五、Service服务

概述:

Android 应用程序可分为前台应用程序和后台服务程序两种。Activity 对应的程序是前台程序,可使用 startActivity()方法将 Intent 指定的活动转到前台运行,即活动控制权由当前活动转到 Intent 指定的活动。Service 对应的程序是后台服务,可使用 starService()方法将指定的应用到后台运行,即不改变当前运行程序的控制权。

Service 分为两种类型:

  1. 本地服务(local Service):这种服务主要在应用程序内部使用,用于实现应用程序本身的任务,比如自动下载程序。
  2. 远程服务(Remote Service):这种服务主要在应用程序之间使用,一个应用程序可以使用远程服务调用其他的应用程序,例如天气预报

•Service与Activity的地位并列,但作用完全不同:

•Activity可与用户进行交互,并且Activity运行时会获取当前控制权。

•Service一般不与用户进行交互,并且Service运行时不会获取控制权。

•Service有自己的生命周期,可以调用Context.startService()来启动一个服务。服务启动后,这个服务会一直运行,直到使用Context.stopService()或stopSelf()方法结束服务。

Service 特点:

  1. 没有用户界面,不与用户交互
  2. 长时间运行,不占程序控制权
  3. 比 Activity 的优先级高,不会轻易被 Android 系统终止,即使Service 被系统终止,在系统资源恢复后Service 仍将自动进行
  4. 用于进程间通信(Inter Process Communication,IPC),解决两个不同进程之间的调用和通信问题

实现Service应用的步骤

  1. 创建一个 Service 类并配置,onCreate()方法初始化 Service,标志着 Service 生命周期的开始
  2. 启动或绑定 Service,onStart()方法启动一个 Service,代表 Service 进入了运行状态
  3. 停止 Service,onDestroy()方法用来释放 Service 的占用资源,标志 Service 生命周期的结束

启动和绑定 Service

启动方式有两种

  1. 启动方式:使用 Context.startService()方法启动 Service,调用者与 Service 之间没有关联,即使调用者推出,Service 服务依然运行

  2. 绑定方式:通过 Conte.bindService()启动 Service,调用者与 Service 之间绑定在一起,调用者一旦退出,Service 服务也就终止

停止 Service

根据启动 Service 方式的不同,需采用不同的方法停止 Service

  1. 使用 Context.startService()方法启动的 Service,通过调用 Context.stopServicet()或 Service.stopSelf()方法结束
  2. 使用 Context.bindService()绑定的 Service,通过调用 Context.unbindservice()解除绑定

Context.stopService 和 Context.unbindservice只是停止过程中的开始部分,系统最终会调用 onDestroy()销毁服务并释放资源

stopService()方法和 stopSelf()方法不同,stopService() 强行终止当前服务,stopSelf ()直到Intent 被处理完才停止服务

Android 提供大量的系统服务,这些系统服务用于完成不同的功能,通过Context.getSystem.Service()方法可以获取不同服务管理对象

NotificationManager 类是系统的通知服务管理类,它能够将通知 Notification 信息显示在状态栏上

六、数据存储

Android 的四种数据存储方式

  1. 使用 preference 存储数据:

    preference 采用“键-值”对方式组织和管理数据,数据存储在 XML 文件中。它是一个轻量级的存储机制,该方式实现比较简单,适合简单数据的存储。

  2. 使用 File 存储数据:

    文件存储的特点介于 preference 和 SQLite 之间,比 Preference 方式更适合存储较大的数据,从存储结构化来看,这种方式不同于 SQLite,不适合结构化的数据存储。

  3. 使用 SQLite 存储数据,SQLite 相对于MySQL 数据库来说,是一个轻量级的数据库,适合移动设备中复杂数据的存储。Android 已经竭诚了 SQLite 数据库,通过这种方式进行增加、插入、删除、更新等操作。

  4. 使用网络存储数据:

    将数据通过 java.net. 和 android.net. 包中的类存储于网络。

Android 提供了 内容提供器(ContextProvider)以达到访问应用程序之间数据共享的目的。ContextProvider 可以使用 SQLite 数据库或者文件作为存储方式(通常使用 SQLite 数据库)

访问 Preference 的 API

使用 Preference 方式来存取数据时,需要用到 SharedPreferences 和 SharedPreferences.Editor 接口,这两个接口在 android.content 包中。

使用 SharedPreferences 存储数据步骤:

  1. 使用 getSharedPreferences()得到 SharedPreferences 对象,调用 getSharedPreferences()方法
  2. 使用 sharedPreferences.Editor 的 putXXX()方法保存数据

  3. 使用 SharedPreferences.Editor 的 commit()方法将本次操作的数据写入 XML 文件中

  4. 使用 SaredPreferences 的 getXXX()方法获取相应的数据。

File 存储数据

不同于 Preference 存储,文件存储方式不受类型限制,可以将一些数据直接以文件的形式保存在设备中,如文本文件、PDF、音频、图片等。如果需要存储复杂的数据,可以使用文件进行存储。Android 提供了读写文件的方法。

文件操作

和传统的 java 中实现 I/O 的程序类似,通过 Context.openFileInput()方法可以获取标准的文件输入流(FileInputStream),以读取设备上的文件。通过 Context.openFileOutput()方法可以获取标准的文件输出流(FileOutputStream),将数据写到文件中。

SQLite 存储数据

SQLite 是基于 C语言设计开发的开源数据库,最大支持2048G 数据,它具有以下特征:

  1. 轻量级
  2. 独立:它于底层操作系统无关,其核心引擎不需要安装,也不依赖任何第三方软件,SQLite 几乎可以在所有的操作系统上运行,具有较高的独立性。
  3. 便于管理和维护
  4. 可移植性
  5. 语言无关
  6. 事务性

SQLite 数据库操作

  1. 创建或打开数据库

    使用 openDatabase()方法打开指定的数据库

  2. 使用 openOrCreateDatabase()方法打开或创建指定数据库

  3. 删除数据库

    android.content.Context.deleteDatabase()方法用于删除指定的数据库。

  4. 关闭数据库

    sqliteDatabase.close()关闭数据库

数据共享 ContentProvider

ContentProvider(内容提供器)是所有应用程序之间的数据存储和检索的一个桥梁,其作用是使各个应用之间能共享数据。

Android 系统为一些常见的应用(如音乐、视频、图像、联系人列表等)定义了相应的 ContentProvider,她们被定义在 android.provider 包下

小结

  1. 适合结构化数据存储的是:SQLite
  2. 可以存储为 XML 文件的存储方式是:Preference
  3. 关于 Android 数据存储正确的是:
    1. Preference 适合小数据量的存储
    2. 文件方式适合大文件存储
    3. SQLite 适合嵌入式设备进行数据存储
    4. Android 文件存储可以使用标准 java(Java SE)中的 IO机制

七、网络通信

包含部分:网络通信包含三部分内容:发送方、接收方以及协议栈

发送方和接收方是参与通信的主体,协议栈是发送方和接收方进行通信的规约。按照服务类型,网络通信可分为面向连接和无连接的方式。

面向连接:是在通信前简历通信链路,而通信结束后释放该链路。

无连接方式:不需要在通信前建立链接,这种方式不保证传输的质量。

Android 中常用的网络编程方式:

  1. 针对 TCP/IP 协议的 Socket 和 ServerSocket
  2. 针对 HTTP 协议的网络编程,如 HttpURLConnection 和 HttpClient
  3. 直接使用 WebKit 访问网络

注意:

  • Android 中所有的访问网络的操作必须在新的线程中执行,不能直接在主线程(UI 线程)中执行
  • 不能在主线程之外的其他线程更新 UI,可以通过 Handler 来更新 UI

Socket 通信

Socket 通常称作“套接字”,这个套接字用来描述通信链的句柄:IP 地址和端口

  • Socket 通信是指双方采用 Socket 机制交换数据
    • TCP 协议是可靠的、面向连接的协议,这种方式需要在通信前建立通信双方的连接链路,而通信结束后又释放该链路
    • UDP 数据报协议是不可靠的、无连接的协议,这种鞋一不需要在通信前建立通信双方的连接。而 UDP 使用可靠性来换取传输开销,其传输开销比 TCP 小
  • Java.net 包中提供了两个 Socket 类
    • Socket 是客户端的 Socket 对应的类
    • ServerSocket 是服务器端的 Socket 对应的类,这个嘞表示一个等待客户端连接的服务端套接字

Socket 工作步骤:

  • 根据指定地址和端口创建一个 Socket 对象
  • 调用 ServerSocket 的 accept()方法,在指定的端口监听到来的连接。accept()一直处于阻塞状态,直到有客户端试图建立连接,这时 accept()方法返回连接客户端玉服务器的 Socket 对象
  • 调用 getInputStream()方法或 getOutputStream()方法打开连接到 Socket 的输入/出流
  • 客户端于服务器根据一定的协议交互,直到关闭连接
  • 关闭客户端的 Socket
  • 回到第2步,继续监听下一次的连接

HTTP 网络编程

HTTP 协议是 Intent 上使用最为广泛的通信协议,随着移动互联网时代的到来,基于 HTTP 的手机等移动终端的应用也会更加广泛。在 Android 中使用 HTTP 进行网络编程的有以下两种:

  • HttpURLConnection
  • Apache HTTP 客户端组件 HttpClient
HttpURLConnection:

HttpURLConnection 是一个抽象类,无法直接实例化,其对象主要通过 URL 的 openConnection()方法获得。

HttpClient:

Apache 提供了HTTP 客户端组件的 HttpClient,它对 Java.net 中的类进行封装和抽象,更适合在 Android 上开发网络应用,似的针对 HTTP 编程更加方便、高效。

WebView

WebView 是 WebKit 中专门用来浏览网页和视图组件,它作为应用程序的 UI 接口,为用户提供了一系列的网页浏览、用户交互接口,通过这些接口显示和处理请求的网络资源

WebView 视图组件的优点:
  1. 功能强大,支持 CSS、JavaScript和 HTML,并能很好地融入布局,使页面更加美观
  2. 能够对浏览器控件进行详细的设置,例如字体、背景、滚动样式
  3. 能够捕捉所有浏览器的操作,例如单机、打开或关闭 URL

小结:

  • Socket 通常称作“套接字”,这个套接字用来描述通信链的句柄:IP 地址和端口
  • ServerSocket 用于监听特定端口的 TCP 连接,其 accept()方法用于监听到来的连接,并返回一个 Socket
  • HttpURLConnection 用于连接基于 HTTP 协议和 URL 网络资源
  • HTTPURLConnection 是一个抽象类,无法直接实例化,其对象主要通过 URL 的 openConnection()方法获得
  • Apache 提供了 HTTP 客户端组件 HttpClient,它对 Java.net 中的类进行封装和抽象,更适合在 Android 上开发网络应用
  • HttpClient 通常使用 DefaultHttpClient生成 HttpClient 对象。DefaultHttpClient 是默认的实现 HttpClient 类
  • 根据请求方法的不同会用到 HttpGet 和 HttpPost 两个对象,HttpGet 封装以 Get 方式提交请求,而 HttpPost 封装以 Post 方式提交的请求。
  • Android 提供内置浏览器,该浏览器使用开源的 WebKit 引擎
  • WebView 使 WebKit 中专门用来浏览网页的视图组件,它作为应用程序 UI 接口,为用户提供了一系列的网页浏览、用户交互借口,通过这些接口显示和处理请求的网络资源
  • Android 中所有访问网络的操作必须在新的线程中执行,不能直接在主线程(UR线程)中执行
  • 不能在主线程之外的其他线程更新 UI,可以通过 Handler 来更新 UI
CATALOG
  1. 1. Android Leanrning_record
    1. 1.1. 一、Android 概述
      1. 1.1.1. Android 的优点
      2. 1.1.2. Android 的挑战
      3. 1.1.3. Android 平台的技术架构
      4. 1.1.4. Android 应用程序构成
    2. 1.2. 二、活动(Activity)
      1. 1.2.1. Activity 生命周期
        1. 1.2.1.1. Activity 类中的7各方法定义了 Activity 完整的生命周期
        2. 1.2.1.2. Activity 生命周期
        3. 1.2.1.3. Android 中的资源使用
          1. 1.2.1.3.1. 字符串资源
          2. 1.2.1.3.2. 图片资源
      2. 1.2.2. 第二章小结
    3. 1.3. 三、用户界面
      1. 1.3.0.1. 用户界面元素分类
      2. 1.3.0.2. 视图组件(View)
      3. 1.3.0.3. 视图容器(ViewGroup)
      4. 1.3.0.4. 布局管理(Layout)
        1. 1.3.0.4.0.1. LinerLayout:线性布局
        2. 1.3.0.4.0.2. RelativeLayout:相对布局
        3. 1.3.0.4.0.3. TableLayout:表格布局
        4. 1.3.0.4.0.4. AbsoluteLayout:绝对布局
        5. 1.3.0.4.0.5. FrameLayout:框架布局
        6. 1.3.0.4.0.6. GridLayout:网格布局
    4. 1.3.0.5. 事件处理机制
    5. 1.3.0.6. 对话框和提示信息(Toast)
    6. 1.3.0.7. 对话框
    7. 1.3.0.8. 常用 widget 组件
    8. 1.3.0.9. 菜单
    9. 1.3.0.10. ActionBar
    10. 1.3.0.11. 第三章小结
  • 1.4. 四、意图(Intent)
    1. 1.4.1. Intent 组成属性
    2. 1.4.2. Intent 启动
    3. 1.4.3. Intent 消息传递
    4. 1.4.4. Intent Filter
    5. 1.4.5. 广播接收Intent
    6. 1.4.6. 简述 Intent 的过滤机制
    7. 1.4.7. 简述 Android 广播机制的作用
      1. 1.4.7.1. 本章小结
  • 1.5. 五、Service服务
    1. 1.5.1. 实现Service应用的步骤
    2. 1.5.2. 启动和绑定 Service
  • 1.6. 六、数据存储
    1. 1.6.0.1. 访问 Preference 的 API
    2. 1.6.0.2. 使用 SharedPreferences 存储数据步骤:
    3. 1.6.0.3. File 存储数据
    4. 1.6.0.4. 文件操作
    5. 1.6.0.5. SQLite 存储数据
    6. 1.6.0.6. SQLite 数据库操作
    7. 1.6.0.7. 数据共享 ContentProvider
    8. 1.6.0.8. 小结
  • 1.7. 七、网络通信
    1. 1.7.0.1. 包含部分:网络通信包含三部分内容:发送方、接收方以及协议栈
    2. 1.7.0.2. Socket 通信
    3. 1.7.0.3. Socket 通常称作“套接字”,这个套接字用来描述通信链的句柄:IP 地址和端口
    4. 1.7.0.4. HTTP 网络编程
      1. 1.7.0.4.1. HttpURLConnection:
    5. 1.7.0.5. HttpClient:
    6. 1.7.0.6. WebView
      1. 1.7.0.6.1. WebView 视图组件的优点:
    7. 1.7.0.7. 小结: