Android NDK开发详解连接性之使用 5G 增强应用及gRPC构建客户端

使用 5G 增强应用

有时,对 Android 应用做出更改只是一小步,有时甚至需要您彻底改变您的思维方式。5G 可不是一小步。

增量体验
这种体验与 4G 体验相同,但由于 5G 的带宽更高、延迟更低,所以自然而然更好。通常只涉及 Wi-Fi 体验。
变革性体验
一种全新的体验,完全依赖于 5G 的优势(带宽和延迟)以及能够检测连接的不按流量计费的性质。

5G 不仅具有更快的速度和更低的延迟,它为应用带来了新的可能性。本主题介绍了转变用户体验的一些方法。

如需直接为应用添加 5G 功能,请参阅向应用添加 5G 功能。

将室内用例转变为室外用例

在 5G 问世之前,视频聊天要求用户确认其他所有人均已连接到 Wi-Fi,或者是否愿意支付昂贵和低质量的串流的数据流量费用。使用不按流量计费的 5G 网络时,您可以只与其他人进行视频通话,并期望您的电话始终都能接通,无论用户身在何处。

借助 5G,用户可以在出行前停止规划下载,而是在需要的时候下载需要的内容。您可以通过公开一个鼓励用户下载整个专辑或显示节目每一集的播放列表来鼓励这种思维转变。

此外,在没有连接到 Wi-Fi 网络的情况下,5G 还可让您有机会参与实时多人游戏。不再需要确保每个人都能连接到稳定的家庭网络;现在,可随时随地通过 5G 玩游戏。您还可以考虑添加通常专用于游戏笔记本电脑或台式机的功能,如游戏内语音和视频聊天。

将以照片为中心的用户体验转变为以视频为中心或以 AR 为中心的用户体验

在 5G 之前,大多数应用的视觉体验都以照片或短视频剪辑为中心。通过添加 5G 功能,您的应用可以通过为应用添加增强现实功能(例如使用地图引导用户时)打造更加身临其境的用户体验。

您可以使用额外的带宽将照片替换为视频,以增强用户体验。可以考虑提供包含预提取视频的视频轮播界面,这些视频始终会立即开始。

有效预提取

使用 3G 和 4G 时,最佳实践仅限于用户当前使用的相对少量内容缓冲。5G 消除了这一限制,让您可以通过预提取知道他们可能需要的所有内容块,利用您对用户体验历程的了解来帮助用户。

例如,您可以提供新的基元,让用户指定约束条件(我最近听了 50 首歌曲、这个城市中最受欢迎的 10 首歌曲等等),然后适时地下载这些集合(例如播放列表、专辑或集合),而无需用户自行组合并明确下载集合(如播放列表、专辑或集合)。

将小众用例转变为主流用例

在没有 5G 网络的情况下,很少有用户在线播放或观看直播。随着 5G 的推出,这种小众用例可以成为主流用例。具体而言,Android 11 添加了对低延迟视频编解码器的支持。应用可以使用新的 API 为特定编解码器检查和配置低延迟播放。这与 Stadia 等游戏流式传输服务相结合,可以为 5G 设备提供引人入胜的用户体验。

告知用户何时使用 5G

在 Android 11 及更高版本中,具有 android.Manifest.permission.READ_PHONE_STATE 权限的应用可以通过 PhoneStateListener.onDisplayInfoChanged() 请求更新电话显示信息。其中包括用于营销和品牌塑造的无线接入技术信息。

这款新 API 提供了适用于不同运营商的各种 5G 图标显示解决方案。支持的技术包括:

LTE
采用载波聚合技术的 LTE (LTE+)
高级专业版 LTE (5Ge)
NR (5G)
毫米波移动网络频段上的 NR(5G+ 和 5G UW)

使用 gRPC 构建客户端-服务器应用

gRPC 是一种可在任何环境中运行的现代开源高性能 RPC 框架。借助可插拔支持,它可以在数据中心内和跨数据中心高效地连接服务,以实现负载平衡、跟踪、运行状况检查和身份验证。它也适用于在分布式计算的最后环节将设备、移动应用和浏览器连接到后端服务。您可以在 gRPC 的官方网站上找到相关文档,并获取开源社区的支持。本指南将向您介绍使用 gRPC 构建 Android 应用的解决方案。

grpc.io 是 gRPC 项目的官方网站。要详细了解 gRPC 的工作原理,请参阅什么是 gRPC?和 gRPC 概念。要了解如何在 Android 应用中使用 gRPC,请参阅 gRPC Android Java 快速入门中的 Hello World 示例。您还可以在 GitHub 上找到其他几个 gRCP Android 示例。

功能

过程调用简化操作
由于它是 RPC,编程模型是过程调用:技术的网络方面从应用代码中抽象出来,使其看起来几乎就像是正常的进程内函数调用。您的客户端-服务器互动不会受到 HTTP 资源方法(例如 GET、PUT、POST 和 DELETE)语义的限制。与 REST API 相比,您的实现看起来更自然,无需处理 HTTP 协议元数据。
通过 HTTP/2 进行高效网络传输
从移动设备向后端服务器传输数据可能是一个非常耗费资源的过程。使用标准 HTTP/1.1 协议时,从移动设备到云服务的频繁连接会耗尽电池电量,增加延迟并阻止其他应用进行连接。默认情况下,gRPC 在 HTTP/2 上运行,这引入了双向流式传输、流控制、报头压缩以及通过单个 TCP/IP 连接多路传输请求的能力。因此,gRPC 可以减少资源使用量,从而缩短您的应用与云中运行的服务之间的响应时间,减少网络使用量以及延长在移动设备上运行的客户端的电池续航时间。
内置流式传输数据交换支持
gRPC 在一开始设计时就考虑到了 HTTP/2 对全双工双向流式传输的支持。流式传输支持任意大小的请求和响应,例如需要上传或下载大量信息的操作。借助流式传输,客户端和服务器可以同时读取和写入消息,并在无需跟踪资源 ID 的前提下相互订阅。这可以让您的应用实现变得更加灵活。
与协议缓冲区无缝集成
gRPC 通过针对 Android 优化的代码生成器插件(Protobuf Java 精简版)将协议缓冲区 (Protobuf) 用作其序列化/反序列化方法。与基于文本的格式(例如 JSON)相比,Protobuf 在编组速度和代码大小方面提供了更高效的数据交换,因此更适合在移动环境中使用。此外,Protobuf 简明的消息/服务定义语法有助于您更轻松地为应用定义数据模型和应用协议。

用法概览

根据 gRPC 基础知识 - Android Java 教程,为 Android 应用使用 gRPC 涉及四个步骤:

使用协议缓冲区定义 RPC 服务并生成 gRPC 客户端接口。
构建一个渠道,作为在客户端和服务器之间进行 RPC 调用的媒介。
创建客户端存根作为从客户端发起 RPC 调用的入口点。
像执行本地过程调用一样,对远程服务器进行 RPC 调用。

为了便于演示,在提供的示例中,字节以纯文本形式传输。不过,您的应用应始终对生产环境中的网络数据进行加密。gRPC 提供 SSL/TLS 加密支持以及用于身份验证的 OAuth 令牌交换(Google 服务为 OAuth2)。如需了解详情,请参阅 Android 上的 TLS 和使用 OAuth2。
注意:如果您使用 Gradle 作为应用的构建工具,Protobuf Gradle 插件是一个方便的工具,可用于自动生成 gRPC Java 代码并编译到应用中。如需了解详情,请参阅适用于 Gradle 的 Protobuf。
传输

gRPC 为 Android 客户端提供两种传输实现方式:OkHttp 和 Cronet。
注意:使用传输专用渠道构建器(例如 OkHttpChannelBuilder 或 CronetChannelBuilder)创建渠道适合更高级的用法。如果您使用 ManagedChannelBuilder 构建渠道,类加载器会在运行时加载普通 OkHttpChannelBuilder 作为默认实现。从 gRPC 的 1.24 版本开始,我们建议使用 AndroidChannelBuilder,它的功能类似,但包含一些特定于 Android 的优化。

选择传输方式(高级)

OkHttp
    OkHttp 是专为在移动设备上使用而设计的轻量级网络堆栈。它是 gRPC 在 Android 环境中运行的默认传输方式。要将 OkHttp 用作应用的 gRPC 传输方式,请使用 OkHttpChannelBuilder 构建频道,该构建器会封装 AndroidChannelBuilder,并将网络监视器注册到 Android 操作系统以快速响应网络更改。示例用法可以在 gRPC-Java AndroidChannelBuilder 中找到。

Cronet(实验性)
    Cronet 是 Chromium 的网络堆栈,打包为面向移动设备的库。它借助先进的 QUIC 协议提供强大的网络支持,这在不可靠的网络环境中尤其有效。要详细了解 Cronet,请参阅使用 Cronet 执行网络操作。要使用 Cronet 作为应用的 gRPC 传输方式,请使用 CronetChannelBuilder 构造渠道。gRPC-Java Cronet 传输中提供了一个示例用法。

注意:Cronet 的双向流式传输功能仍在实验阶段。因此,CronetChannelBuilder 被标记为实验性 API。

一般来说,我们建议定位到近期 SDK 版本的应用使用 Cronet,因为它提供了更强大的网络堆栈。使用 Cronet 的缺点是会增加 APK 的大小,因为添加二进制 Cronet 依赖项会使应用大小增加 1MB 以上,而 OkHttp 约为 100KB。从 GMSCore v.10 开始,可以从 Google Play 服务加载 Cronet 的最新副本。APK 大小可能不再是一个问题,尽管安装了最新 GMSCore 的设备可能仍然偏向于使用 OkHttp。
注意:从 Google Play 服务加载 Cronet 时,请先调用 CronetProviderInstaller.installProvider(Context),然后再创建 CronetEngine/ExperimentalCronetEngine 对象,以防止因错误(例如设备需要更新版本的 Google Play 服务等)而抛出意外的异常。

本页面上的内容和代码示例受内容许可部分所述许可的限制。Java 和 OpenJDK 是 Oracle 和/或其关联公司的注册商标。

最后更新时间 (UTC):2019-12-30。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

五一编程

程序之路有我与你同行

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值