5_Android Training 学习笔记_ Android 网络连接与云服务

本文介绍了如何使用Android系统中的网络服务发现(NSD)及WIFIP2P进行网络连接,包括检查网络连接状态的方法、在应用中执行网络操作的最佳实践、管理网络资源的策略,以及如何优化网络数据传输以降低能耗。

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 最小化定期更新造成的影响

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

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值