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 最小化定期更新造成的影响
下面的都留着以后专门学习吧。。