Lipsky

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. 小结:#