Android Leanrning_record
一、Android 概述
Android 的优点
- 系统的开放性和免费性
- 移动互联网的发展
- 相关厂商的大力支持
Android 的挑战
- 用户体验不一致,安全性有待提高
- 技术的进一步完善
- 开放手机联盟的挑战
- 其他技术的竞争
Android 平台的技术架构
四部分:
- Linux 内核层
- 中间层
- 应用程序框架
- 应用层
Android 应用程序构成
活动(Activity)
活动是最基本的 Android 应用程序组件。在应用程序中,一个活动通常是一个单独的屏幕。每个活动都通过继承活动基类而被实现为一个独立的活动类。
意图(Intent)
意图用来描述应用程序的功能。利用消息实现应用程序间的交互机制,并能够在程序运行中连接两个不同的组件。Intent 描述了应用中一次操作的动作、数据以及附加数据,向 Android 表达某种请求或者意愿。
服务(Service)
服务(Service)是 Android 应用程序中具有较长生命周期但是没有用户界面的程序。它在后台运行,并且可以与其他程序进行交互。
内容提供器(ContentProvider)
Android 应用程序可以使用文件或 SQLite 数据库来存储数据。内容提供器提供了一种多应用间数据共享的方式。当某个应用程序的数据需要与其他应用程序共享时,内容提供器就会发挥作用。
二、活动(Activity)
概述:
Activity 是 Android 应用程序中最基本的组成单位。Activity 主要负责创建显示窗口,一个 Activity 对象通常就代表了一个单独的屏幕。在 Android 应用中,如果需要有显示的界面,应用中至少要包含一个 Activity 类。在具体实现时,每个 Activity 都被定义为一个独立的类,并且继承 Android 提供的 android.app.Activity。例如:
1 | import android.app.Activity; |
Activity 生命周期
Android 生命周期过程中的四种状态:
- 激活或者运行状态:此时 Activity 运行在屏幕的前台
- 暂停状态:此时 Activity 失去了焦点但是仍然对用户可见,例如在改 Activity 上遮挡了一个透明的或者非全屏的 Activity
- 停止状态:此时 Activity 被其他的 Activity 完全覆盖
- 终止状态:此时 Activity 会被系统清理出内存
Activity 类中的7各方法定义了 Activity 完整的生命周期
- onCreate():Activity 初次创建时被调用,该方法一般进行一些静态设置,如创建 View 视图、进行数据绑定等。如果 Activity 是首次创建,本方法执行完后会将调用 onStart(),如果 Activity 是停止后重新显示则调用 onRestart()。下一个方法:onStart()或 onRestart()
onStart():当 Activity 对用户即将可见的时候调用。下一个方法:onRestart()或 onResume()
onRestart():当 Activity 从停止状态重启启动时调用,下一个方法 Resume()
- onResume():当 Activity 将要与用户交互时调用此方法,此时 Activity 在 Activity 栈的栈顶,用户输入的信息可以传递给它,如果其他 Activity 在它的上方恢复显示,则调用 onPause(),下一个方法onPause()
- onPause():当系统要启动一个其他的 Activity 时(其他的 Activity 显示之前),这个方法将被调用,用于提交持久数据的改变、停止动画等。下一个方法 onResume()或 onStop()
- onStop():当另一个 Activity 恢复并遮盖住当前的 Activity,导致其对用户不再可见时,这个方法将被调用。下一个方法 onStart()或 onDestroy()
- onDestroy():在 Activity 被销毁前所调用的最后一个方法,下一个被调用的方法:无
Activity 生命周期
- 完整生命期:从 Activity 最初调用 onCreate()方法到最终调用 onDestroy()方法的真个过程称为完整的生命周期。
- 可见生命周期:从 Activity 调用 onStart()方法开始,到调用对应的 onStop()方法为止。
- 前台生命周期:从 Activity 调用 onResume()方法开始,到调用对应的 onPause()方法为止的这个过程称为前台生命周期,这段时间当前的 Activity 处于其他所有 Activity 的前面,且可以与用户交互。
Android 中的资源使用
- res 目录:目录下存放 Android 程序能通过“R”资源类直接访问的资源
- assets 目录:存放 Android 程序不能直接访问的资源(原生文件),如MP3文件,必须通过 AssetManager 类以二进制流的形式读取
字符串资源
程序中用到的字符串资源需要在 res/values/strings.xml 文件中定义,在其他资源文件中或代码中都可以访问字符串资源
在其他资源文件中采用“@string/资源名称”的形式访问
图片资源
程序用到的图片资源需要放在 res 文件夹中的 drawable 资源目录下。
在其他资源文件或代码中可以采用“@drawable/资源名称”的形式访问,在代码中可通过“R.drawable.资源名称”的形式访问
第二章小结
Activity 是 Android 应用程序中最基本的组成单位
大部分的 Android 应用中包含多个 Activity 类
Activity 共有四种状态:激活状态或者运行状态、暂停状态、停止状态、终止状态
控制 Activity 屏幕横屏显示方式,设置参数“android:screenOrientation”为 landscape 或 portrait
Activity 被系统销毁时,保存必要信息,保证在 Activity 恢复时不被丢失
每个 Activity 类在定义时都必须要继承“android.app.Activity”
“android.app.Activity”类中的方法定义了 Activity 完整的生命周期
Android 中的资源是指非代码部分,是代码中使用的外部资源
- 对于字符串资源,在其他资源文件中使用“@string/资源名称”的形式访问,在代码可通过“R.string.资源名称”的形式访问
- 对于图片资源,在其他资源文件中使用“@drawable/资源名称”的形式访问,在代码可通过“R.drawable.资源名称”的形式访问
三、用户界面
用户界面元素分类
- 视图组件(View)
- 视图容器(ViewGroup)
- 布局管理(Layout)
视图组件(View)
Android 的窗体功能室通过 widget(窗体部件)类实现的,而 View 类是 widget的基类。
View 是用户界面的基础元素,View 对象存储了 Android 屏幕上一个特定的矩形区域的布局和内容属性的数据体,通过 View 对象,可实现对布局、绘图、焦点变换、滚动条、屏幕区域的按键、用户交互等功能。
视图容器(ViewGroup)
ViewGroup 是 View 的容器,可将 View 添加到 ViewGroup 中,一个 ViewGroup 也可以加入到另一个 ViewGroup 里。
布局管理(Layout)
Layout 用来管理组件的布局格式,以组织界面中组件的呈现方式。
LinerLayout:线性布局
该布局中子元素之间成线性排列,即在某一方向上的顺序排列,常见的有水平顺序排列、垂直顺序排列。
该布局中的子组件按照垂直或者水平方向排列,方向由“android:orientation”属性控制,属性值有垂直(vertical)和水平(horizontal)两种。
RelativeLayout:相对布局
该布局是一种根据相对位置排列元素的布局方式,这种方式允许子元素指定她们相对于其他元素或父元素的位置(通过 ID 指定)。线性布局不需要特殊的指定其他父元素,而相对布局使用之前必须指定其参照物,只有指定参照物之后,才能定义其相对位置。
TableLayout:表格布局
该布局将子元素的位置分配到表格的行或列中,即按照表格的顺序排序。表格布局并不是真正意义上的表格,只是按照表格的方式组织元素的布局,元素之间并没有实际表格中的分界线。
AbsoluteLayout:绝对布局
该布局按照绝对坐标对元素进行布局。与相对布局相反,绝对布局不需要参照物。
FrameLayout:框架布局
该布局将所有子元素以层叠的方式显示,后加的元素会被放在最顶层,覆盖之前的元素。
GridLayout:网格布局
该布局能够同时对 X 轴、Y 轴空间进行对齐,大大简化了对复杂布局的处理
事件处理机制
Android 系统中引用 Java 的时间处理机制,包括对事件、事件源和事件监听器三个事件模型:
- 事件(Event):是一个描述事件源状态改变的对象,事件不是通过 new 运算符创建的,而是由用户操作触发的。
- 事件源(Event source):产生事件的对象,事件源通常是 UI 组件,例如单机按钮,则按钮就是事件源
- 事件监听器(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
第三章小结
- Android 的界面元素主要由 View(视图组件)、ViewGroup(视图容器)和 Layout(布局管理) 部分组成
- Android 系统中引用Java 的时间处理机制,包括事件、事件源和事件监听器三个事件模型
- Android 中提供了两种创建布局的方式:XML 布局文件和代码直接实现
- Android 的布局包含 LinerLayout、RelativeLayout、TableLayout、AbsoluteLayout、FrameLayout 和 GridView 等多种布局
- 提示信息(Toast)是 Android 中用来显示提示信息的一种机制,与对话框不同,Toast 没有焦点,而且 Toast 显示时间有限,过一会会自动消失
- Android 系统提供了四种对话框:AlterDialog、ProgressDialog、DataPickerDialog 和 TimePickerDialog
- 常见的 Widget 组件有:按钮(Button)、文本框(TextView)、编辑框(EditText)、复选框(CheckBox)、单选按钮组(RadioGroup)、下拉列表(Spinner)
- Android 的菜单有两种:选项菜单(Options Menus)和上下文菜单(Context Menus)
- 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 属性中有如下两种方式:
直接调用 putExtra()方式,该方式是将信息添加到 Extra 属性中,然后通过调用 getXXXExtra()方法进行获取。这种方式比较简单、直接,主要在数据量比较少的情况下使用
另一种是先数据封装到 Bundle 包中,Bundle 被看成一个“键/值”映射的哈希表,当数据量比较多时,可以使用 Bundle 存放数据,然后通过 putExtras()方法将 Bundle 对象添加到 Extra 属性中,在通过使用 getExtras()方法获取存放的 Bundle 对象,最后读取 Bundle 包中的数据。
这种方法是间接通过 Bundle 包对数据先进性封装,在进行传递,主要用在数据量较多的情况下使用
Intent Filter
Intent 可以通过显示方式或隐式方式来找到目标组件,显示方式式直接通过设置组件名来实现的,而隐式方式是通过 Intent Filter 过滤来实现的。
Android 提供了两种生成 Intent Filter 方式:
- 通过 IntentFilter 类生成
- 通过在配置文件 AndroidManifest.xml 中定义
元素生成的
广播接收Intent
通常广播 Intent 用于向监听器通知系统事件或应用程序事件,从而扩展应用程序间的事件驱动的编程模型
实现广播和接收 Intent 机制包含四个步骤:
注册相应的广播接收器(Broadcast Receiver)
发送广播
Activity 的 sendBroadcast()、sendOrderBroadcast()和 sendStrikyBroadcast()方法都可以广播 Intent 到广播接收器,满足条件的 BroadcastReceiver 都会执行 onReceiver 方法。
满足条件的广播接收器执行接收方法 onReceiver()。
销毁广播接收器。
简述 Intent 的过滤机制
主要用来过滤隐式意图。当用户进行一项操作的时候,Android系统会根据配置的 “意图过滤器” 来寻找可以响应该操作的组件,服务。一种是通过 IntentFilter 类生成,另一种是通过在 AndroidManifest.xml 文件中定义
简述 Android 广播机制的作用
- 通常广播Intent 用于向监听器通知系统事件或应用程序事件,从而扩展应用程序间的事件驱动的编程模型
- 广播 Intent可以使应用程序更加开放,使用 Intent 来广播事件,可以使在原应用程序不发生改变的情况下,对事件做出响应
- Android 中大量使用广播 Intent 来广播系统事件,例如电池电量、系统时间和来电
本章小结
- Intent 由动作、数据、分类、类型、组件和扩展信息等内容组成
- Action 属性用于描述 Intent 要完成的动作,对要执行的动作进行一个简要描述
- Intent 的 Data 属性是执行动作的 URI 和 MIME 类型
- Category 属性指明一个执行 Action 的分类
- component 属性用于指明 Intent 的目标组件的类名称
- Extra 属性用于添加一些附加信息
- 多 Activity 的 Android 应用程序可通过 starActivity()方法指定相应的 Intent 对象来启动另外一个 Activity
- Intent 的 Extra 属性用于 添加一些附加信息,利用该属性可以进行消息的传递
- 将传递的信息存放到 Extra 属性中有如下两种方式:一种是直接将信息添加到 Extra 属性中,另一种是将数据封装到 Bundle 包中
- Intent 可以通过显示方式或者隐士方式找到目标组件,显示方式是直接通过设置组件名来实现的,而隐士方式是通过 Intent Filter 过滤来实现的
- 在 AndroidManifest.xml 配置文件中,Intent Filter 以
元素来指定。一个组件中可以有多个 元素,每个 元素描述不同的能力 - 广播接收器(Broadcast Receiver)是接受广播消息并对消息做出反应的组件
- Activity 的 sendBroadcast()、sendOrderBroadcast()和 sendStrikyBroadcast()方法都可以广播 Intent 到广播接收器
五、Service服务
概述:
Android 应用程序可分为前台应用程序和后台服务程序两种。Activity 对应的程序是前台程序,可使用 startActivity()方法将 Intent 指定的活动转到前台运行,即活动控制权由当前活动转到 Intent 指定的活动。Service 对应的程序是后台服务,可使用 starService()方法将指定的应用到后台运行,即不改变当前运行程序的控制权。
Service 分为两种类型:
- 本地服务(local Service):这种服务主要在应用程序内部使用,用于实现应用程序本身的任务,比如自动下载程序。
- 远程服务(Remote Service):这种服务主要在应用程序之间使用,一个应用程序可以使用远程服务调用其他的应用程序,例如天气预报
•Service与Activity的地位并列,但作用完全不同:
•Activity可与用户进行交互,并且Activity运行时会获取当前控制权。
•Service一般不与用户进行交互,并且Service运行时不会获取控制权。
•Service有自己的生命周期,可以调用Context.startService()来启动一个服务。服务启动后,这个服务会一直运行,直到使用Context.stopService()或stopSelf()方法结束服务。
Service 特点:
- 没有用户界面,不与用户交互
- 长时间运行,不占程序控制权
- 比 Activity 的优先级高,不会轻易被 Android 系统终止,即使Service 被系统终止,在系统资源恢复后Service 仍将自动进行
- 用于进程间通信(Inter Process Communication,IPC),解决两个不同进程之间的调用和通信问题
实现Service应用的步骤
- 创建一个 Service 类并配置,onCreate()方法初始化 Service,标志着 Service 生命周期的开始
- 启动或绑定 Service,onStart()方法启动一个 Service,代表 Service 进入了运行状态
- 停止 Service,onDestroy()方法用来释放 Service 的占用资源,标志 Service 生命周期的结束
启动和绑定 Service
启动方式有两种
启动方式:使用 Context.startService()方法启动 Service,调用者与 Service 之间没有关联,即使调用者推出,Service 服务依然运行
绑定方式:通过 Conte.bindService()启动 Service,调用者与 Service 之间绑定在一起,调用者一旦退出,Service 服务也就终止
停止 Service
根据启动 Service 方式的不同,需采用不同的方法停止 Service
- 使用 Context.startService()方法启动的 Service,通过调用 Context.stopServicet()或 Service.stopSelf()方法结束
- 使用 Context.bindService()绑定的 Service,通过调用 Context.unbindservice()解除绑定
Context.stopService 和 Context.unbindservice只是停止过程中的开始部分,系统最终会调用 onDestroy()销毁服务并释放资源
stopService()方法和 stopSelf()方法不同,stopService() 强行终止当前服务,stopSelf ()直到Intent 被处理完才停止服务
Android 提供大量的系统服务,这些系统服务用于完成不同的功能,通过Context.getSystem.Service()方法可以获取不同服务管理对象
NotificationManager 类是系统的通知服务管理类,它能够将通知 Notification 信息显示在状态栏上
六、数据存储
Android 的四种数据存储方式
使用 preference 存储数据:
preference 采用“键-值”对方式组织和管理数据,数据存储在 XML 文件中。它是一个轻量级的存储机制,该方式实现比较简单,适合简单数据的存储。
使用 File 存储数据:
文件存储的特点介于 preference 和 SQLite 之间,比 Preference 方式更适合存储较大的数据,从存储结构化来看,这种方式不同于 SQLite,不适合结构化的数据存储。
使用 SQLite 存储数据,SQLite 相对于MySQL 数据库来说,是一个轻量级的数据库,适合移动设备中复杂数据的存储。Android 已经竭诚了 SQLite 数据库,通过这种方式进行增加、插入、删除、更新等操作。
使用网络存储数据:
将数据通过 java.net. 和 android.net. 包中的类存储于网络。
Android 提供了 内容提供器(ContextProvider)以达到访问应用程序之间数据共享的目的。ContextProvider 可以使用 SQLite 数据库或者文件作为存储方式(通常使用 SQLite 数据库)
访问 Preference 的 API
使用 Preference 方式来存取数据时,需要用到 SharedPreferences 和 SharedPreferences.Editor 接口,这两个接口在 android.content 包中。
使用 SharedPreferences 存储数据步骤:
- 使用 getSharedPreferences()得到 SharedPreferences 对象,调用 getSharedPreferences()方法
使用 sharedPreferences.Editor 的 putXXX()方法保存数据
使用 SharedPreferences.Editor 的 commit()方法将本次操作的数据写入 XML 文件中
- 使用 SaredPreferences 的 getXXX()方法获取相应的数据。
File 存储数据
不同于 Preference 存储,文件存储方式不受类型限制,可以将一些数据直接以文件的形式保存在设备中,如文本文件、PDF、音频、图片等。如果需要存储复杂的数据,可以使用文件进行存储。Android 提供了读写文件的方法。
文件操作
和传统的 java 中实现 I/O 的程序类似,通过 Context.openFileInput()方法可以获取标准的文件输入流(FileInputStream),以读取设备上的文件。通过 Context.openFileOutput()方法可以获取标准的文件输出流(FileOutputStream),将数据写到文件中。
SQLite 存储数据
SQLite 是基于 C语言设计开发的开源数据库,最大支持2048G 数据,它具有以下特征:
- 轻量级
- 独立:它于底层操作系统无关,其核心引擎不需要安装,也不依赖任何第三方软件,SQLite 几乎可以在所有的操作系统上运行,具有较高的独立性。
- 便于管理和维护
- 可移植性
- 语言无关
- 事务性
SQLite 数据库操作
创建或打开数据库
使用 openDatabase()方法打开指定的数据库
使用 openOrCreateDatabase()方法打开或创建指定数据库
删除数据库
android.content.Context.deleteDatabase()方法用于删除指定的数据库。
关闭数据库
sqliteDatabase.close()关闭数据库
数据共享 ContentProvider
ContentProvider(内容提供器)是所有应用程序之间的数据存储和检索的一个桥梁,其作用是使各个应用之间能共享数据。
Android 系统为一些常见的应用(如音乐、视频、图像、联系人列表等)定义了相应的 ContentProvider,她们被定义在 android.provider 包下
小结
- 适合结构化数据存储的是:SQLite
- 可以存储为 XML 文件的存储方式是:Preference
- 关于 Android 数据存储正确的是:
- Preference 适合小数据量的存储
- 文件方式适合大文件存储
- SQLite 适合嵌入式设备进行数据存储
- Android 文件存储可以使用标准 java(Java SE)中的 IO机制
七、网络通信
包含部分:网络通信包含三部分内容:发送方、接收方以及协议栈
发送方和接收方是参与通信的主体,协议栈是发送方和接收方进行通信的规约。按照服务类型,网络通信可分为面向连接和无连接的方式。
面向连接:是在通信前简历通信链路,而通信结束后释放该链路。
无连接方式:不需要在通信前建立链接,这种方式不保证传输的质量。
Android 中常用的网络编程方式:
- 针对 TCP/IP 协议的 Socket 和 ServerSocket
- 针对 HTTP 协议的网络编程,如 HttpURLConnection 和 HttpClient
- 直接使用 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 视图组件的优点:
- 功能强大,支持 CSS、JavaScript和 HTML,并能很好地融入布局,使页面更加美观
- 能够对浏览器控件进行详细的设置,例如字体、背景、滚动样式
- 能够捕捉所有浏览器的操作,例如单机、打开或关闭 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