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优化下载以高效地访问网络

无线电波状态机
一个处于完全工作状态的无线电会大量消耗电量,因此需要学习如何在不同能量状态下进行过渡,当无线电没有工作时,节省电量,当需要时尝试最小化与无线电波供电有关的延迟。

  1. Full power:当无线连接被激活的时候,允许设备以最大的传输速率进行操作。
  2. Low power:一种中间状态,对电量的消耗差不多是 Full power 状态下的50%。
  3. Standby:最小的能量状态,没有被激活或者需求的网络连接。

在低功耗和空闲的状态下,电量消耗会显著减少。这里也会介绍重要的网络请求延迟。从 low power 能量状态返回到 full power 大概需要花费1.5秒,从空闲能量状态返回到 full power 状态需要花费2秒。

这节内容好吊,有些联网软件特别耗电大概就是这里问题了。

App 如何影响无线电波状态机
预取数据

5.3.2 最小化定期更新造成的影响

下面的都留着以后专门学习吧。。

0 0