高能效通讯助手(Bastet)开发指导书developer.huawei.com/consumer/cn/devunion/download/Bastet.pdf高能效通讯助手(Bastet)开发指导书...

25
高能效通讯助手(Bastet)开发指导书 版权所有©华为技术有限公司 1 , 25 高能效通讯助手(Bastet)开发指导书 文档版本:V1.0.0

Transcript of 高能效通讯助手(Bastet)开发指导书developer.huawei.com/consumer/cn/devunion/download/Bastet.pdf高能效通讯助手(Bastet)开发指导书...

Page 1: 高能效通讯助手(Bastet)开发指导书developer.huawei.com/consumer/cn/devunion/download/Bastet.pdf高能效通讯助手(Bastet)开发指导书 版权所有©华为技术有限公司

高能效通讯助手(Bastet)开发指导书

版权所有©华为技术有限公司 第 1 页, 共 25 页

高能效通讯助手(Bastet)开发指导书

文档版本:V1.0.0

Page 2: 高能效通讯助手(Bastet)开发指导书developer.huawei.com/consumer/cn/devunion/download/Bastet.pdf高能效通讯助手(Bastet)开发指导书 版权所有©华为技术有限公司

高能效通讯助手(Bastet)开发指导书

版权所有©华为技术有限公司 第 2 页, 共 25 页

版权所有 © 华为技术有限公司2015。 保留一切权利。

非经本公司书面许可,任何单位和个人不得擅自摘抄、复制本文档内容的部分或全部,并不得以

任何形式传播。

商标声明

和其他华为商标均为华为技术有限公司的商标。

本文档提及的其他所有商标或注册商标,由各自的所有人拥有。

注意

您购买的产品、服务或特性等应受华为公司商业合同和条款的约束,本文档中描述的全部或部分

产品、服务或特性可能不在您的购买或使用范围之内。除非合同另有约定,华为公司对本文档内

容不做任何明示或默示的声明或保证。

由于产品版本升级或其他原因,本文档内容会不定期进行更新。除非另有约定,本文档仅作为使

用指导,本文档中的所有陈述、信息和建议不构成任何明示或暗示的担保。

Page 3: 高能效通讯助手(Bastet)开发指导书developer.huawei.com/consumer/cn/devunion/download/Bastet.pdf高能效通讯助手(Bastet)开发指导书 版权所有©华为技术有限公司

高能效通讯助手(Bastet)开发指导书

版权所有©华为技术有限公司 第 3 页, 共 25 页

修订记录

日期 修订版本 修改描述

2016.03.07 V1.0.0 初稿

Page 4: 高能效通讯助手(Bastet)开发指导书developer.huawei.com/consumer/cn/devunion/download/Bastet.pdf高能效通讯助手(Bastet)开发指导书 版权所有©华为技术有限公司

高能效通讯助手(Bastet)开发指导书

版权所有©华为技术有限公司 第 4 页, 共 25 页

目录

1 概述 ................................................................................................................................... 5

2 系统框架 ........................................................................................................................... 6

2.1 系统应用概况 ............................................................................................................ 6

2.2 接口交互形式 ............................................................................................................ 6

3 基本使用流程 ................................................................................................................... 7

3.1 服务功能概况 ............................................................................................................ 7

3.2 SDK 使用准备 ............................................................................................................ 7

3.3 HwBastet 存在检测 ................................................................................................... 8

4 永远在线服务 ................................................................................................................... 9

4.1 心跳托管基本流程 .................................................................................................... 9

4.2 心跳托管服务变更流程 .......................................................................................... 11

4.3 托管重建使用方法 .................................................................................................. 14

4.3.1 基本适配流程 .................................................................................................. 14

4.3.2 终止托管重建流程 .......................................................................................... 16

4.3.3 恢复托管重建流程 .......................................................................................... 16

4.4 相关 API 使用说明 .................................................................................................. 18

4.4.1 构造函数 .......................................................................................................... 18

4.4.2 方法调用 .......................................................................................................... 18

4.4.3 消息通知 .......................................................................................................... 20

5 定制信道技术 ................................................................................................................. 22

5.1 基本功能 .................................................................................................................. 22

5.2 初始化说明 .............................................................................................................. 22

5.3 相关 API 使用说明 .................................................................................................. 22

6 网络质量测量技术 ......................................................................................................... 24

6.1 基本功能 .................................................................................................................. 24

6.2 初始化 ...................................................................................................................... 24

6.3 相关 API 使用说明 .................................................................................................. 24

6.4 相关消息通知 .......................................................................................................... 24

7 附录 ................................................................................................................................. 25

7.1 应用消息通知 ID ..................................................................................................... 25

7.2 网络可用性 .............................................................................................................. 25

Page 5: 高能效通讯助手(Bastet)开发指导书developer.huawei.com/consumer/cn/devunion/download/Bastet.pdf高能效通讯助手(Bastet)开发指导书 版权所有©华为技术有限公司

高能效通讯助手(Bastet)开发指导书

版权所有©华为技术有限公司 第 5 页, 共 25 页

1 概述

华为Bastet技术是Android智能终端数据业务功耗/性能提升一揽子解决方案,致力

于解决用户在线体验、数据业务功耗、无线网络传输性能等核心问题,为移动互联网应

用保驾护航。

Bastet立足于3GPP/LTE协议及现网特性,综合映射到TCP/IP协议栈及应用程序,采

用了闭环控制、信号质量评估、无线信道控制、TCP/IP优化等主流技术。 Bastet为应用

程序提供API接口,用于配置心跳socket链路托管、选择信道;同时提供消息通知应用

程序,知会网络可用情况,预报信道质量等信息。

本文档预期读者为Android应用程序开发人员,了解并应用Bastet提供的各类接口实

现上述功能。

Bastet支持华为Mate8及其以后发布的华为P系列、D系列、Mate系列、荣耀部分机

型,建议使用华为Mate8进行开发调试,并在手机设置中打开被测应用的“受保护应用”

开关,和“始终连接数据业务”开关。

Page 6: 高能效通讯助手(Bastet)开发指导书developer.huawei.com/consumer/cn/devunion/download/Bastet.pdf高能效通讯助手(Bastet)开发指导书 版权所有©华为技术有限公司

高能效通讯助手(Bastet)开发指导书

版权所有©华为技术有限公司 第 6 页, 共 25 页

2 系统框架

2.1 系统应用概况

Native Layer

Android Framework Bastet SDK

Application

Bastet Daemon

Libcore

Linux KernelBastet Driver

Bastet Hardware

API

Network

SubSystem

图1 Bastet技术系统框架

2.2 接口交互形式

Bastet系统与应用采用如下形式交互:

1. 采用SDK方式,对应用程序提供相应API接口,提供JAR包供应用进行开发编译;

2. 提供永远在线服务(AOL Always-On-Line)API,多种发送信道API,网络质量测量API;

3. 为应用提供Socket状态,无线网络状态等信息的查询API,亦具备由Handler通知应用的

交互方式;

4. WIFI网络、电信模式(即主、副卡槽之一或全部插入电信卡)下暂不支持本方案API,

交互方式按原Android方式进行。出于功耗性能平衡考虑,WIFI状态下网络较稳定;而

电信模式下硬件暂未支持。因此这两种情况下托管心跳功能会自动失效,由应用自行管

理心跳,同时网络状态默认为良好,任何调用信道发送接口均按原Android机制进行处

理。

Page 7: 高能效通讯助手(Bastet)开发指导书developer.huawei.com/consumer/cn/devunion/download/Bastet.pdf高能效通讯助手(Bastet)开发指导书 版权所有©华为技术有限公司

高能效通讯助手(Bastet)开发指导书

版权所有©华为技术有限公司 第 7 页, 共 25 页

3 基本使用流程

3.1 服务功能概况

Bastet系统提供以下服务:

1. 永远在线服务(AOL Always-On-Line)

应用程序可以设置托管心跳Socket,适用于各种后台service与服务器保持长连接;

被托管的Socket空闲超时后,Bastet处理固定格式心跳收发,保持链路;

如果使能,当Socket异常断开后,将以Handle方式通知应用,并在合适时机立即重

建Socket,通知应用Socket恢复;

在手机深度睡眠后,被托管Socket数据收到网络数据,将以最高优先级到达应用。

2. 定制信道技术

高速信道,单次API调用可承载5KB(应用层)以内数据一次高优先级发送,以最

快速度到达服务器;

低功耗信道,对于一次收发均可确认为小于1KB的小包,提供低功耗收发;

非实时信道。非实时数据选择此API进行发送,将在预定时间内到达,功耗最低。

3. 网络状态通知

可通过API查询;

亦可由Handler方式通知应用。

3.2 SDK 使用准备

本接口以Jar包的形式提供,jar包内部实现接口类HwBastet,该类定义相应接口的成员

函数供应用调用。

1. 使用接口前将hwframework.jar包导入应用开发的eclipse工程,导入后如下图所示:

图2 Jar包导入示意图

Page 8: 高能效通讯助手(Bastet)开发指导书developer.huawei.com/consumer/cn/devunion/download/Bastet.pdf高能效通讯助手(Bastet)开发指导书 版权所有©华为技术有限公司

高能效通讯助手(Bastet)开发指导书

版权所有©华为技术有限公司 第 8 页, 共 25 页

2. 加载此jar包时,Order and Export选择如下:

图3 工程配置示意图

3. 代码文件中导入接口类:

图4 接口类导入示意图

3.3 HwBastet 存在检测

为保证应用代码一致性,建议应用程序确认当前系统是否存在 Bastet 功能 JAVA 库,

若找不到相关库,则直接抛异常退出或不适用 HwBastet 相关接口,代码实例如图 5。

图5 检测类存在方法建议图

Page 9: 高能效通讯助手(Bastet)开发指导书developer.huawei.com/consumer/cn/devunion/download/Bastet.pdf高能效通讯助手(Bastet)开发指导书 版权所有©华为技术有限公司

高能效通讯助手(Bastet)开发指导书

版权所有©华为技术有限公司 第 9 页, 共 25 页

4 永远在线服务

4.1 心跳托管基本流程

心跳托管功能实现了应用程序Client与Server心跳数据自动收发特性。区别于使用

Android提供的Alarm特性,华为心跳托管的收发由硬件实现,因此在应用TCP长连接空

闲超时后,无需应用唤醒手机,减少功耗开销的同时,提高了链路稳定性,基本操作流

程,如图6所示:

图 6心跳托管使用流程

注:红色字体为应用程序需修改流程,蓝色部分为Bastet反馈至应用的消息类型。

APK Android hwBastet-API hwBastet-Hardware Server

1 : Socket()<<create>>

2 : Connect()

3 : HwBastet()<<create>>

4 : PrintWriter: :println()

5 : Send

6 : Receive7 : BufferedReader: :readLine()

8 : isBastetAvailable()

9 : setAolHeartbeat()

10 : NewHeartbeat

11 : Send

12 : Receive

13 : Send

14 : Receive15 : BASTET_HEARTBEAT_CYCLE()

16 : Receive()

17 : judgeNotHeartBeat()18 : Received()19 : BufferedReader: :readLine()

20 : Error/closed() 21 : Stop

22 : Socket()<<create>>

23 : Connect

24 : HwBastet()

<<create>>

Page 10: 高能效通讯助手(Bastet)开发指导书developer.huawei.com/consumer/cn/devunion/download/Bastet.pdf高能效通讯助手(Bastet)开发指导书 版权所有©华为技术有限公司

高能效通讯助手(Bastet)开发指导书

版权所有©华为技术有限公司 第 10 页, 共 25 页

初始化流程(1~7)

1) 应用在创建Socket成功后,调用HwBastet类构造托管;

2) 第4~7步,应用完成与服务器交互过程,应用程序可保留原流程;

启动流程(8~15)

1) 第8步,判断当前网络情况是否支持Bastet心跳托管服务,如果支持则转入9;如果

不支持心跳托管服务,应用可沿用原流程处理心跳及链路托管等工作;

2) 第9步,调用setAolHeartbeat方法配置心跳信息,心跳托管功能将自动开启;

3) 第10~14步,如果所托管Socket空闲超时,Bastet硬件将自动收发心跳与服务器交互,

确保在线;

4) 同时如果心跳收发异常,将采用Android系统原生机制告知应用Socket断开(接收

线程readline函数异常返回);

5) 第15步,当Bastet经过数段心跳,获悉网络可以容忍的最大心跳值。当探测值小于

步骤8中设置值(例如应用设置心跳为15分钟,实际探测网络心跳时长为10分钟):

a) 为了避免心跳周期过长导致的Socket异常断开,Bastet平台会采用探测的周期

为实际心跳间隔(15min变为10min);

b) Bastet平台通过BASTET_HEARTBEAT_CYCLE消息知会应用实际心跳周期。

业务数据(非心跳包)收发(16~19)

1) 第16~17步,Bastet硬件检测到所托管Socket收到一条网络下行数据,经判断,为非

心跳数据包;

2) 第18~19步,保留全部Android原有机制,应用程序可接收Server端数据包;

3) 与接收相同,应用程序亦可随时主动发起数据发送,无需理会心跳数据收发。

Socket异常处理A(20~24,针对异常后生成新的Socket类)

1) 第20步,应用程序接收线程Socket类对象的IO流readline函数异常返回,说明Socket

已经异常断开;

2) 第21步,当Socket断开后(异常/正常),Bastet平台将自动停止心跳动作;

3) 第22步,应用实例化新的Socket类对象(例如选用新的Server地址)并完成Connect;

4) 第24步,应用实例化新的HwBastet类对象,再次执行4~9步骤初始化登陆认证及心

跳新配置,托管将再次启动;

Socket异常处理B(针对异常后不生成新的Socket类对象,沿用原有Socket实例,图7)

Page 11: 高能效通讯助手(Bastet)开发指导书developer.huawei.com/consumer/cn/devunion/download/Bastet.pdf高能效通讯助手(Bastet)开发指导书 版权所有©华为技术有限公司

高能效通讯助手(Bastet)开发指导书

版权所有©华为技术有限公司 第 11 页, 共 25 页

图 7非重新实例化心跳托管恢复流程

1) 第1步,应用程序接收线程Socket类对象的IO流readline函数异常返回,说明Socket

已经异常断开;

2) 第2步,当Socket断开后(异常/正常),Bastet平台将自动停止心跳动作;

3) 第3~4步,与图3中20~25步区别在于,应用未实例化新的Socket对象,而是采用

connect方法恢复原Socket对象与服务器之间的TCP长连接;

4) 第5步,判断当前网络情况是否支持Bastet心跳托管服务,如果支持则转入6;如果

不支持心跳托管服务,应用可沿用原流程处理心跳及链路托管等工作;

5) 第6步,由于Socket对象未重新实例化,因此仅需调用resumeHeartbeat方法,而无

需再次配置心跳间隔,心跳内容等信息,即可恢复原托管心跳的工作流程。

4.2 心跳托管服务变更流程

在Wi-Fi或某些未知网络接入场景,Bastet平台将不再支持心跳托管服务,该情况下,需

要应用自行通过Alarm等方法控制心跳收发机制,进而完成心跳动作。对于这些情况,Bastet

会通过Handler方式通知应用,下面对于各场景进行处理流程介绍:

应用首次调用时,不支持心跳托管

图 8初始化不支持托管

APK Android hwBastet-API hwBastet-Hardware Server

1 : Error/closed()2 : Stop

3 : connect()

4 : Connect

5 : isBastetAvailable()

6 : resumeHeartbeat()

7 : ReStart

APK Android hwBastet-API hwBastet-Hardware Server

1 : Socket()

<<create>>2 : connect()

3 : HwBastet()<<create>>

4 : isBastetAvailable()

5 : false

6 : ConfigHB()

Page 12: 高能效通讯助手(Bastet)开发指导书developer.huawei.com/consumer/cn/devunion/download/Bastet.pdf高能效通讯助手(Bastet)开发指导书 版权所有©华为技术有限公司

高能效通讯助手(Bastet)开发指导书

版权所有©华为技术有限公司 第 12 页, 共 25 页

1) 第1~3步,完成Socket及HwBastet类对象实例化;

2) 第4~5步,调用isBastetAvailable方法后,返回false,表示不支持心跳托管;

3) 第6步,应用程序采用自身原有心跳策略收发心跳包即可。

初始化配置心跳托管成功,中途发生托管不支持;

图 9托管中途出现心跳托管失效

1) 第1~7步,完成Socket及HwBastet类对象实例化、心跳配置;

2) 第8~9步,Bastet硬件托管心跳收发动作;

3) 第10步,网络状态变化至无法托管场景,通过BASTET_HB_NOT_AVAILABLE消

息通知应用程序,之前心跳托管失效,应用需自行处理心跳收发;

4) 第11步,应用配置自身程序(如操控AlarmManagerService等) 启动原有心跳控制

流程;

5) 第12~15步,应用完成心跳收发处理。

在心跳托管失效状态下,再次启用托管流程;

此状态首先在启动初始化调用isBastetAvailable方法返回false(图8)或者托管过程中出

现托管失效(图9)。Bastet平台未提供类似于BASTET_HB_NOT_AVAILABLE 消息的“支

持通知功能”,因为托管失效后,到下次托管有效时,原HwBastet类对象有可能已被JAVA

回收。以心跳托管中途被取消(图9)为例,这里给出下面两种建议方法:

APK Android hwBastet-API hwBastet-Hardware Server

1 : Socket()<<create>>

2 : connect

3 : HwBastet()<<create>>

4 : isBastetAvailable()

5 : true

6 : setAolHeartbeat()7 : NewHeartbeat

8 : send

9 : received

10 : BASTET_HB_NOT_AVAILABLE

11 : ConfigHB()

12 : PrintWriter: :println()13 : send

14 : BufferedReader: :readLine()

15 : received

Page 13: 高能效通讯助手(Bastet)开发指导书developer.huawei.com/consumer/cn/devunion/download/Bastet.pdf高能效通讯助手(Bastet)开发指导书 版权所有©华为技术有限公司

高能效通讯助手(Bastet)开发指导书

版权所有©华为技术有限公司 第 13 页, 共 25 页

方法一 应用每次自行收发心跳成功后,查询一次托管是否可用:

图 10应用自行心跳收发后恢复托管

1) 第1步,应用程序收到BASTET_HB_NOT_AVAILABLE消息通知,心跳托管失效,

应用需自行处理心跳收发;

2) 第2步,应用配置自身程序(如操控AlarmManagerService等) 启动原有心跳控制

流程;

3) 第3~6步,Socket数据空闲超时后,应用自行收发心跳成功;

4) 第7~9步,实例化HwBastet类对象,采用isBastetAvailable方法返回true,说明托管

功能已经恢复,可以继续承担心跳托管任务;

5) 第10步,应用程序完成自行心跳流程暂停;

6) 第11~14步,配置托管心跳,Bastet硬件将自行进行后续心跳托管功能;

7) 如果第9步返回false,则应用程序无需理会HwBastet类对象,按原有应用心跳流程

继续进行即可。

方法二 当应用Socket断开后,恢复心跳托管:

APK Android hwBastet-API hwBastet-Hardware Server

1 : BASTET_HB_NOT_AVAILABLE

2 : ConfigHB()

3 : PrintWriter: :println()

4 : send

5 : BufferedReader: :readLine()

6 : received

7 : HwBastet()

<<create>>

8 : isBastetAvailable()

9 : true

10 : StopAppHB()

11 : setAolHeartbeat()

12 : NewHeartbeat

13 : send

14 : received

Page 14: 高能效通讯助手(Bastet)开发指导书developer.huawei.com/consumer/cn/devunion/download/Bastet.pdf高能效通讯助手(Bastet)开发指导书 版权所有©华为技术有限公司

高能效通讯助手(Bastet)开发指导书

版权所有©华为技术有限公司 第 14 页, 共 25 页

图 11 Socket断开后恢复托管

1) 第1步,应用程序收到BASTET_HB_NOT_AVAILABLE消息通知应用程序,之前心

跳托管失效,应用需自行处理心跳收发;

2) 第2步,应用配置自身程序(如操控AlarmManagerService等) 启动原有心跳控制

流程;

3) 第3~6步,Socket数据空闲超时后,应用自行收发心跳成功;

4) 第7~9步,与方法一(图7)不同在于,应用程序将托管心跳启动重试在Socket断开

后进行, 应用程序再次创建Socket类对象或者采用原Socket类对象connect方法恢

复与服务器之间的TCP长连接;

5) 第10~17步,与之前保持一致,这里需要说明的是,7~9步无论采用再次实例化Socket

类对象或者采用原类对象connect方法恢复TCP连接,这里均需再次实例化HwBastet

对象,因为之前的对象可能因长期不可用而已被系统回收。

4.3 托管重建使用方法

4.3.1 基本适配流程

托管重建用于解决Socket异常断开(非应用主动断开)场景下的托管重建。目的在于选

取网络最佳联网时机完成链路重建,避免应用反复重试导致的功耗异常、实时性较差等问题。

APK Android hwBastet-API hwBastet-Hardware Server

1 : BASTET_HB_NOT_AVAILABLE

2 : ConfigHB()

3 : PrintWriter: :println()

4 : send

5 : BufferedReader: :readLine()

6 : received

7 : Error/closed

8 : Socket()<<create>>

9 : connect

10 : HwBastet()

<<create>>

11 : isBastetAvailable()

12 : true

13 : StopAppHB()

14 : setAolHeartbeat()

15 : NewHeartbeat16 : send

17 : received

Page 15: 高能效通讯助手(Bastet)开发指导书developer.huawei.com/consumer/cn/devunion/download/Bastet.pdf高能效通讯助手(Bastet)开发指导书 版权所有©华为技术有限公司

高能效通讯助手(Bastet)开发指导书

版权所有©华为技术有限公司 第 15 页, 共 25 页

由于Bastet平台在应用Socket异常断开后发起重建,因此仅针对原Socket设定的Server IP地址

及Port,不适用于频繁更换Server端IP地址的场景。具体流程见图12:

图 12 托管重建基本流程

1) 第1~9步,完成Socket、HwBastet对象创建及适配,启用心跳托管;

2) 第10步,应用调用reconnectSwitch(true)方法打开托管重建流程(默认关闭);

3) 第11~13步,由HwBastet硬件平台完成与服务器的心跳/业务交互流程;

4) 第14步,由于网络、服务器、手机自身原因,导致了Socket被Close,Reset,Abandon

等形式的异常断开;

APK Android hwBastet-API hwBastet-Hardware Server

1 : Socket()<<create>>

2 : Connect()

3 : HwBastet()<<create>>

4 : PrintWriter: :println()

5 : Send

6 : Received7 : BufferedReader: :readLine()

8 : isBastetAvailable()

9 : setAolHeartbeat()

10 : reconnectSwitch()

11 : NewHeartbeat

12 : Send

13 : Received

14 : FIN/RST/ABD15 : Closed

16 : Close()

17 : Closed/Error

18 : BASTET_CONNECTION_CLOSED()

19 : ProcessClosed()

20 : HookNetState()

21 : Connect22 : RepairSocket()

23 : Connected24 : connected_ind

25 : BASTET_CONNECTION_ESTABLISHED()

26 : ProcessEsted()

27 : PrintWriter: :println()

28 : Send

29 : Received30 : BufferedReader: :readLine()

Page 16: 高能效通讯助手(Bastet)开发指导书developer.huawei.com/consumer/cn/devunion/download/Bastet.pdf高能效通讯助手(Bastet)开发指导书 版权所有©华为技术有限公司

高能效通讯助手(Bastet)开发指导书

版权所有©华为技术有限公司 第 16 页, 共 25 页

5) 第15~16步,上述断开信息被Bastet硬件平台所识别,并通知Android系统,对当前

Socket进行Close关闭;

6) 第17步,按照Android原生机制,如果Socket异常断开,那么接收线程所监控的

IOStream调用的readline将异常返回,但是为了便于应用区别处理,这里将不再返

回异常,即第17步在实际使用中不会发生;

7) 取而代之,Bastet平台采用Handler消息BASTET_CONNECTION_CLOSED通知应用,

应用程序此刻应该认为Socket断开(类似于网络不可用),不再进行任何发送动作,

等待Socket重建;

8) 第20~24步,Bastet平台在最合适时机重建Socket连接,并修复原Android系统的

Socket数据结构,使之可以继续为应用程序所使用;

9) 第25步,Bastet平台采用Handler消息BASTET_CONNECTION_ESTABLISHED通知

应用Socket已经重建成功,可以继续使用;

10) 第26~30步,应用恢复网络,完成登录认证等流程(类似于Socket连接完成);

11) 由于全部重建工作均由Bastet完成,因此无需调用任何接口,心跳托管,自动重建

等功能自动启动。

4.3.2 终止托管重建流程

在某些场合,应用不再希望Bastet进行托管重建,而是需要断开连接,整理内部数据,

此刻需要断开重建动作,Bastet平台提供了两种途径均可确保托管重建终止:

1) 应用主动调用Socket类Close方法,Bastet认为是应用程序已知行为,不会托管重建;

2) reconnectSwitch(false)方法。

4.3.3 恢复托管重建流程

应用在调用close方法关闭Socket后,如果希望恢复托管重建功能,则可以通过适当的操

作完成。

情况1:close以后,应用未实例化新的Socket对象,而是重新connect服务器。

Page 17: 高能效通讯助手(Bastet)开发指导书developer.huawei.com/consumer/cn/devunion/download/Bastet.pdf高能效通讯助手(Bastet)开发指导书 版权所有©华为技术有限公司

高能效通讯助手(Bastet)开发指导书

版权所有©华为技术有限公司 第 17 页, 共 25 页

图 13 托管重建恢复流程1

如图13所示,在建立Socket成功后,可调用之前实例化的HwBastet对象resumeHeartbeat

方法,在恢复心跳托管的同时,Socket重建也将被开启。

情况2:close以后,应用实例化新的Socket对象恢复长连接(例如:更换Server地址)。

图 14 托管重建恢复流程2

如图14所示,在建立Socket构造成功且与服务器完成连接后,需再次实例化HwBastet对

象并调用相关配置方法,则可恢复托管重建流程。

情况3:采用reconnectSwitch(false)方法关闭托管重建。

图 15 托管重建恢复流程3

如图15,只能采用reconnectSwitch(true)方法恢复,但在调用前需要采用isBastetAvailable

检测托管是否支持。

APK Android hwBastet-API hwBastet-Hardware Server

1 : Socket: :close()

2 : Stop

3 : Connect()

4 : connect

5 : resumeHeartbeat()

APK Android hwBastet-API hwBastet-Hardware Server

1 : Socket()

<<create>>

2 : connect

3 : HwBastet()<<create>>

4 : isBastetAvailable()

5 : setAolHeartbeat()

6 : reconnectSwitch()7 : NewHeartbeat()

APK Android hwBastet-API

1 : reconnectSwitch()

2 : isBastetAvailable()

false

3 : true

4 : reconnectSwitch() true

Page 18: 高能效通讯助手(Bastet)开发指导书developer.huawei.com/consumer/cn/devunion/download/Bastet.pdf高能效通讯助手(Bastet)开发指导书 版权所有©华为技术有限公司

高能效通讯助手(Bastet)开发指导书

版权所有©华为技术有限公司 第 18 页, 共 25 页

4.4 相关 API 使用说明

4.4.1 构造函数

1. HwBastet构造函数

原型:HwBastet(String license, Socket socket, Handler handler, Context context)

参数:

String license:应用身份许可证书,目前未启用

Socket socket:应用通信套接字,构造时需确保该Socket已经处于connected状态;

Handler handler:消息通知接收对象

Context context:应用Activity上下文

返回值:

HwBastet类对象

说明:

HwBastet类对象和应用长连接Socket一一对应,建议应用在创建完长连接Socket后实

例化本对象,并传参长连接Socket对象。

4.4.2 方法调用

1. isBastetAvailable

功能:检查永远在线托管功能是否可用;

原型:boolean isBastetAvailable ()

参数:

返回值:

true :可用

false:不可用

说明:

a) 该方法返回不可用并不意味在线托管功能永远不可用,网络配置导致的临时状态;

b) 在启用心跳托管、自动重建等功能前,需先调用该接口进行必要检查。

2. setAolHeartbeat

Page 19: 高能效通讯助手(Bastet)开发指导书developer.huawei.com/consumer/cn/devunion/download/Bastet.pdf高能效通讯助手(Bastet)开发指导书 版权所有©华为技术有限公司

高能效通讯助手(Bastet)开发指导书

版权所有©华为技术有限公司 第 19 页, 共 25 页

功能:配置启用心跳托管;

接口函数名:void setAolHeartbeat(int interval, byte[] send, byte[] reply)

参数:

int interval:服务器容忍最大时间档位,1代表5分钟、2代表10分钟、3代表15分

钟,其它值默认为15分钟

byte[] send:心跳数据

byte[] reply:期待的远端回复

返回值:

说明:

a) 该接口功能为永远在线子功能,单独调用无效;

b) 应用使能心跳托管功能后,Bastet在参数interval时间内定期发送心跳包出去,并

等待远端答复;

c) 若远端答复和参数reply不一致,则应用会接收到该远端答复;

d) 若等待远端答复超时(10秒),则应用收到超时通知消息;

e) 调用该接口传参都为null,则关闭心跳托管功能,默认功能关闭;

f) 若当前网络(Wifi、蓝牙等)不支持该功能,调用此接口会抛出异常。

3. pauseHeartbeat

功能:暂停心跳托管;

原型:void pauseHeartbeat()

参数:

返回值:

说明:当应用有大量数据需要与服务器交互时,或者需要更新心跳信息,可以暂时

关闭心跳托管功能,正常数据收发无需此接口调用。

4. resumeHeartbeat

功能:恢复心跳托管;

原型:void resumeHeartbeat()

Page 20: 高能效通讯助手(Bastet)开发指导书developer.huawei.com/consumer/cn/devunion/download/Bastet.pdf高能效通讯助手(Bastet)开发指导书 版权所有©华为技术有限公司

高能效通讯助手(Bastet)开发指导书

版权所有©华为技术有限公司 第 20 页, 共 25 页

参数:

返回值:

说明,该方法在以下两种情况下使用:

a) 曾调用pauseHeartbeat暂停心跳托管;

b) Socket断开后,心跳托管自动停止,恢复连接后需再次启用该对象托管心跳收发。

5. reconnectSwitch

功能:自动重连开关;

原型:void reconnectSwitch (boolean enable)

参数:

true: 打开自动重连功能

false:关闭自动重连功能

返回值:

说明:

a) 该接口功能为永远在线子功能,单独调用无效;

b) 永远在线功能关闭的情况下,该接口设置无效。

4.4.3 消息通知

1. BASTET_CONNECTION_ESTABLISHED

含义:Socket托管重建完成

说明:

a) 永远在线功能使能情况下,当Socket重连后,应用会接收到该消息;

b) 本消息ID存在Message.what变量中;

c) 应用通过Hander对象接收该消息。

2. BASTET_CONNECTION_CLOSED

含义:Socket异常断开

Page 21: 高能效通讯助手(Bastet)开发指导书developer.huawei.com/consumer/cn/devunion/download/Bastet.pdf高能效通讯助手(Bastet)开发指导书 版权所有©华为技术有限公司

高能效通讯助手(Bastet)开发指导书

版权所有©华为技术有限公司 第 21 页, 共 25 页

说明:

a) 永远在线功能使能情况下,当Socket断开,应用会接收到该消息;

b) 本消息ID存在Message.what变量中;

c) 应用通过Handler对象接收该消息;

d) 应用收到该消息后应停止网络业务直到链路重建。

3. BASTET_HEARTBEAT_CYCLE

含义:已探测网络心跳周期

说明:

a) 应用启用托管心跳功能后,Bastet会进行心跳探测;

b) 寻找当前网络Socket最大容忍度,寻找的容忍值须小于等于应用通过接口

setAolHeartbeat设置的最大周期值;

c) 当Bastet探测结束后,若探测值和应用最大周期值不一致,则发送此消息给应用;

d) 本消息ID存在Message.what变量中;

e) 应用通过Hander对象接收该消息。

4. BASTET_HB_NOT_AVAILABLE

含义:链路托管不支持

说明:

如果已经启用托管心跳,该消息意味着Bastet平台不再托管心跳需应用自行处理;

Page 22: 高能效通讯助手(Bastet)开发指导书developer.huawei.com/consumer/cn/devunion/download/Bastet.pdf高能效通讯助手(Bastet)开发指导书 版权所有©华为技术有限公司

高能效通讯助手(Bastet)开发指导书

版权所有©华为技术有限公司 第 22 页, 共 25 页

5 定制信道技术

5.1 基本功能

针对应用对功耗/性能的需求不同,华为Bastet平台提供了多样化信道供应用程序调用:

1. 高速信道(Hrt):提供高速数据发送技术,用于应用保证关键用户数据的稳定、高

速收发,尤其在无线网络拥塞情况下表现突出;

2. 非实时信道(Nrt):提供了一种非实时发送机制,Bastet平台承诺在应用要求的时间

范围内,将数据送达服务器,类似于“攒包”,降低功耗及网络信令压力;

3. 低功耗信道(Lpw):对于应用程序可以预知的小包数据(接收、发送均小于1KB),

那么可调用该接口进行发送,应用数据将以最小带宽占用发送数据到网络。

5.2 初始化说明

图 16 托管重建初始化流程

如图16所示,首先应用程序需要保证链路托管、心跳托管功能被正确配置,方可采用该

相关函数进行数据收发。

5.3 相关 API 使用说明

1. sendNrtData

功能:发送非实时数据

原型:void sendNrtData(byte[] data, long timeout, Socket socket)

参数:

byte[] data:应用数据

long timeout:延迟最大值,单位毫秒

APK Android hwBastet-API hwBastet-Hardware Server

1 : Socket()

<<create>>

2 : connect

3 : HwBastet()<<create>>

4 : isBastetAvailable()

5 : setAolHeartbeat()

6 : sendXxxData()

Page 23: 高能效通讯助手(Bastet)开发指导书developer.huawei.com/consumer/cn/devunion/download/Bastet.pdf高能效通讯助手(Bastet)开发指导书 版权所有©华为技术有限公司

高能效通讯助手(Bastet)开发指导书

版权所有©华为技术有限公司 第 23 页, 共 25 页

Socket socket:数据发送Socket,可以为非HwBastet构造时传参的socket对象。若

传入null,则使用HwBastet构造时的socket对象。

返回值:

备注:

a) 应用数据会在参数timeout范围内任意时间点发送;

b) 若当前信道不可用,将自动分流数据按Android原生机制发送。

2. sendHrtData

功能:发送高性能信道数据

原型:void sendHrtData(byte[] data, Socket socket)

参数:

byte[] data:应用数据,注意:一次发送长度最大为5KB;

Socket socket:数据发送Socket,可以为非HwBastet构造时传参的socket对象。

返回值:

备注:

a) 应用数据以高优先级和高资源分配发送;

b) 当数据长度超过5KB或当前信道不可用,将自动分流数据按Android原生机制发送。

3. sendLpwData

功能:发送低功耗数据

原型:void sendLpwData(byte[] data, Socket socket)

参数:

byte[] data:应用数据

Socket socket:数据发送Socket,可以为非HwBastet构造时传参的socket对象。

返回值:

备注:

a) 应用层数据发送长度、可预期接收长度均小于1KB;

b) 当数据长度超过1KB或当前信道不可用,将自动分流数据按Android原生机制发送。

Page 24: 高能效通讯助手(Bastet)开发指导书developer.huawei.com/consumer/cn/devunion/download/Bastet.pdf高能效通讯助手(Bastet)开发指导书 版权所有©华为技术有限公司

高能效通讯助手(Bastet)开发指导书

版权所有©华为技术有限公司 第 24 页, 共 25 页

6 网络质量测量技术

6.1 基本功能

华为Bastet平台,根据无线网络协议、IP协议等多项指标,综合评估当前移动网络情况

的可用度,提供查询及消息通知接口。

6.2 初始化

同5.2。

6.3 相关 API 使用说明

1. inquireNetworkQuality

功能:信道质量查询

原型:int inquireNetworkQuality()

参数:

返回值:

int:当前网络数据发送质量

说明:

应用在发送数据前可以调用此接口查看当前数据发送质量,若质量好,可立即

发送,若质量差,可以不发送或选择其它策略发送。

6.4 相关消息通知

1. BASTET_NET_QUALITY_NOTICE

含义:通知应用当前网络质量等级发生变化

说明:

a) 本消息ID存在Message.what变量中;

b) 网络质量分为不可用、可用两个值,详见附录7.2,该值存在Message. arg1变量中;

c) 当应用收到网络不可用消息时,应停止网络业务,直到收到网络可用通知;

d) 应用定义出HwBastet对象后,当网络变化时,即可收到本消息。

Page 25: 高能效通讯助手(Bastet)开发指导书developer.huawei.com/consumer/cn/devunion/download/Bastet.pdf高能效通讯助手(Bastet)开发指导书 版权所有©华为技术有限公司

高能效通讯助手(Bastet)开发指导书

版权所有©华为技术有限公司 第 25 页, 共 25 页

7 附录

7.1 应用消息通知 ID

名称 值 描述

BASTET_CONNECTION_ESTABLISHED 1 永远在线:链路重建完毕

BASTET_CONNECTION_CLOSED 2 永远在线:链路已断开

BASTET_NET_QUALITY_NOTICE 3 网络质量通知

BASTET_HEARTBEAT_CYCLE 4 探测心跳周期

BASTET_HB_NOT_AVAILABLE 5 链路托管不可用

7.2 网络质量

名称 值 描述

BASTET_NQR_UNAVAILABLE 0 数据无法发送

BASTET_NQR_AVAILABLE 1 数据可以发送