5_Android Training 学习笔记_ Android 网络连接与云服务
来源:互联网 发布:我的淘宝网上银行付款 编辑:程序博客网 时间:2024/06/03 14:50
5.1.1 使用网络服务发现
NSD : Network Service Discovery
使用网络服务发现
5.1.2 - 5.1.3 WIFI P2P
WIFI P2P
5.2 执行网络操作
5.2.1 连接到网络
推荐使用 HttpURLConnection
检查网络连接
在我们的 app 尝试连接网络之前,应通过函数 getActiveNetworkInfo() 和 isConnected() 检测当前网络是否可用。请注意,设备可能不在网络覆盖范围内,或者用户可能关闭 Wi-Fi 与移动网络连接。关于这部分的更多详情,请参考管理网络的使用情况
public void myClickHandler(View view) { ... ConnectivityManager connMgr = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE); NetworkInfo networkInfo = connMgr.getActiveNetworkInfo(); if (networkInfo != null && networkInfo.isConnected()) { // fetch data } else { // display error } ...}
在一个单独的线程中执行网络操作
AsyncTask
连接并下载数据
HttpURLConnection
将输入流转换为字符串
// Reads an InputStream and converts it to a String.public String readIt(InputStream stream, int len) throws IOException, UnsupportedEncodingException { Reader reader = null; reader = new InputStreamReader(stream, "UTF-8"); char[] buffer = new char[len]; reader.read(buffer); return new String(buffer);}
5.2.2 管理网络的使用情况
这一课会介绍如何细化管理使用的网络资源。如果我们的程序需要执行大量网络操作,那么应该提供用户设置选项,来允许用户控制程序的数据偏好。例如,同步数据的频率,是否只在连接到 WiFi 才进行下载与上传操作,是否在漫游时使用套餐数据流量等等。这样用户才不大可能在快到达流量上限时,禁止我们的程序获取后台数据,因为他们可以精确控制我们的 app 使用多少数据流量。
检查设备的网络连接
- ConnectivityManager:它会回答关于网络连接的查询结果,并在网络连接改变时通知应用程序。
- NetworkInfo:描述一个给定类型(就本节而言是移动网络或 Wi-Fi)的网络接口状态。
请注意我们不应该仅仅靠网络是否可用来做出决策。由于 isConnected() 能够处理片状移动网络(flaky mobile networks),飞行模式和受限制的后台数据等情况,所以我们应该总是在执行网络操作前检查 isConnected()。
一个更简洁的检查网络是否可用的示例如下。getActiveNetworkInfo() 方法返回一个 NetworkInfo 实例,它表示可以找到的第一个已连接的网络接口,如果返回 null,则表示没有已连接的网络接口(意味着网络连接不可用):
public boolean isOnline() { ConnectivityManager connMgr = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE); NetworkInfo networkInfo = connMgr.getActiveNetworkInfo(); return (networkInfo != null && networkInfo.isConnected());}
这里实现了网络控制,比如仅在 WIFI 模式下连接。
5.2.3 解析 XML 数据
5.2 传输数据时避免消耗大量电量
在这一章,我们将学习最小化下载,网络连接,尤其是无线电连接对电量的影响。
下面几节课会演示如何使用像缓存(caching)、轮询(polling)和预取(prefetching)这样的技术来调度与执行下载操作。我们还会学习无线电波的 power-use 属性配置是如何影响我们对于在何时,用什么,以何种方式来传输数据的选择。当然这些选择是为了最小化对电量的影响。
5.3.1优化下载以高效地访问网络
无线电波状态机
一个处于完全工作状态的无线电会大量消耗电量,因此需要学习如何在不同能量状态下进行过渡,当无线电没有工作时,节省电量,当需要时尝试最小化与无线电波供电有关的延迟。
- Full power:当无线连接被激活的时候,允许设备以最大的传输速率进行操作。
- Low power:一种中间状态,对电量的消耗差不多是 Full power 状态下的50%。
- Standby:最小的能量状态,没有被激活或者需求的网络连接。
在低功耗和空闲的状态下,电量消耗会显著减少。这里也会介绍重要的网络请求延迟。从 low power 能量状态返回到 full power 大概需要花费1.5秒,从空闲能量状态返回到 full power 状态需要花费2秒。
这节内容好吊,有些联网软件特别耗电大概就是这里问题了。
App 如何影响无线电波状态机
预取数据
5.3.2 最小化定期更新造成的影响
下面的都留着以后专门学习吧。。
- 5_Android Training 学习笔记_ Android 网络连接与云服务
- 6_Android Training 学习笔记_ Android 联系人与位置信息
- 5.7_Android Training 学习笔记_ 使用 Volley 执行网络数据传输
- 1.1_Android Training 学习笔记_建立第一个App
- 1.2_Android Training 学习笔记_添加App Bar
- 1.3_Android Training 学习笔记_兼容不同的设备
- 1.4_Android Training 学习笔记_管理 Activity 的生命周期
- 1.6_Android Training 学习笔记_数据保存
- 3.1_Android Training 学习笔记_管理音频播放
- 3.2.1_Android Training 学习笔记_简单地拍照
- 3.2.1_Android Training 学习笔记_简单地录像
- 4.3_Android Training 学习笔记_添加动画
- 10.1_Android Training 学习笔记_设计高效的导航
- 2.0_Android Training 学习笔记_Android 分享操作
- 1.5_Android Training 学习笔记_Fragment
- 1.7_Android Training 学习笔记_与其他应用的交互
- Android学习笔记第五篇--网络连接与云服务(一)
- Android学习整理_基础_Android概述
- 应用间跳转问题
- java Integer的值比较
- 源码解析Android中View的layout布局过程
- Eclipse 快捷键 mac
- 我的课程
- 5_Android Training 学习笔记_ Android 网络连接与云服务
- 面向对象程序设计上机练习七(类和对象)
- [从头学数学] 第269节 [计算几何] 点在多边形内
- [ARM] [基础][编译]ARM的浮点功能历史分类和对应的编译选项
- setVisibility()参数
- oracle11g 导出表报EXP-00011:table不存在。
- Android View类中的生命周期是怎样的?
- Android蓝牙通讯模块
- Android第一行代码学习笔记六----手机多媒体