HarmonyOS学习路之开发篇—网络与连接(网络管理)

本文涉及的产品
数据传输服务 DTS,数据迁移 small 3个月
推荐场景:
MySQL数据库上云
数据传输服务 DTS,数据同步 small 3个月
推荐场景:
数据库上云
数据传输服务 DTS,数据同步 1个月
简介: 网络管理开发概述HarmonyOS网络管理模块主要提供以下功能:

网络管理开发概述

HarmonyOS网络管理模块主要提供以下功能:


数据连接管理:网卡绑定,打开URL,数据链路参数查询。

数据网络管理:指定数据网络传输,获取数据网络状态变更,数据网络状态查询。

流量统计:获取蜂窝网络、所有网卡、指定应用或指定网卡的数据流量统计值。

HTTP缓存:有效管理HTTP缓存,减少数据流量。

创建本地套接字:实现本机不同进程间的通信,目前只支持流式套接字。

约束与限制

使用网络管理模块的相关功能时,需要请求相应的权限。


image.png

使用当前网络打开一个URL链接

场景介绍

应用使用当前的数据网络打开一个URL链接。

接口说明

应用使用当前网络打开一个URL链接,所使用的接口说明如下。

表1 网络管理功能的主要接口

image.png

开发步骤

调用NetManager.getInstance(Context)获取网络管理的实例对象。

调用NetManager.getDefaultNet()获取默认的数据网络。

调用NetHandle.openConnection()打开一个URL。

通过URL链接实例访问网站。

NetManager netManager = NetManager.getInstance(context);
if (!netManager.hasDefaultNet()) {
    return;
}
NetHandle netHandle = netManager.getDefaultNet();
// 可以获取网络状态的变化
NetStatusCallback callback = new NetStatusCallback() {
    // 重写需要获取的网络状态变化的override函数
};
netManager.addDefaultNetStatusCallback(callback);
// 通过openConnection来获取URLConnection
HttpURLConnection connection = null;
try {
    String urlString = "EXAMPLE_URL"; // 开发者根据实际情况自定义EXAMPLE_URL
    URL url = new URL(urlString);
    URLConnection urlConnection = netHandle.openConnection(url,
                java.net.Proxy.NO_PROXY);
    if (urlConnection instanceof HttpURLConnection) {
        connection = (HttpURLConnection) urlConnection;
        connection.setRequestMethod("GET");
        connection.connect();
        // 之后可进行url的其他操作
    }
} catch(IOException e) {
    HiLog.error(TAG, "exception happened.");
} finally {
    if (connection != null){
        connection.disconnect();
    }
}

使用当前网络进行Socket数据传输

场景介绍

应用使用当前的数据网络进行Socket数据传输。

接口说明

应用使用当前网络进行Socket数据传输,所使用的接口说明如下。

表1 网络管理功能的主要接口

image.png

开发步骤

  1. 1.调用NetManager.getInstance(Context)获取网络管理的实例对象。
  2. 2.调用NetManager.getDefaultNet()获取默认的数据网络。
  3. 3.调用NetHandle.bindSocket()绑定网络。
  4. 4.使用socket发送数据。
NetManager netManager = NetManager.getInstance(context);
if (!netManager.hasDefaultNet()) {
    return;
}
NetHandle netHandle = netManager.getDefaultNet();
// 通过Socket绑定来进行数据传输
DatagramSocket socket = null;
try {
    InetAddress address = netHandle.getByName("www.EXAMPLE.com"); // 开发者根据实际情况自定义EXAMPLE_URL
    socket = new DatagramSocket();
    netHandle.bindSocket(socket);
    byte[] buffer = new byte[1024]; 
    DatagramPacket request = new DatagramPacket(buffer, buffer.length, address, port); // port为连接UDP Socket时自行指定的端口
    // buffer赋值
    // 发送数据
    socket.send(request);
} catch(IOException e) {
    HiLog.error(TAG, "exception happened.");
}finally {
    if (socket != null) {
        socket.close();
    }
}

使用指定网络进行数据访问

场景介绍

应用可以调用API接口来使用指定网络进行数据传输。在进行数据传输前,需要先建立自定义的网络类型。

接口说明

应用使用指定网络进行数据访问,所使用的接口说明如下。

表1 网络管理功能的主要接口

image.png

开发步骤

  1. 1.调用NetSpecifier.Builder()构建指定数据网络的实例。
  2. 2.调用NetManager.setupSpecificNet()建立数据网络,通过callback获取网络状态变化。
  3. 3.进行数据发送。
NetManager netManager = NetManager.getInstance(context);
private class MmsCallback extends NetStatusCallback {
    @Override
    public void onAvailable(NetHandle netHandle) {
        // 通过setAppNet把后续应用所有的请求都通过该网络进行发送
        netManager.setAppNet(netHandle);
        HttpURLConnection connection = null;
        try {
            String urlString = "EXAMPLE_URL"; // 开发者根据实际情况自定义EXAMPLE_URL
            URL url = new URL(urlString);
            URLConnection urlConnection = netHandle.openConnection(url, java.net.Proxy.NO_PROXY);
            if (urlConnection instanceof HttpURLConnection) {
                connection = (HttpURLConnection) urlConnection;
            }
            connection.setRequestMethod("GET");
            connection.connect();
            // 之后可进行url的其他操作
        } finally {
            if(connection != null){
                connection.disconnect();
            }
        }
        // 如果业务执行完毕,可以停止获取
        netManager.removeNetStatusCallback(this);
    }
}
MmsCallback callback = new MmsCallback();
// 配置一个彩信类型的蜂窝网络
NetSpecifier req = new NetSpecifier.Builder()
    .addCapability(NetCapabilities.NET_CAPABILITY_MMS)
    .addBearer(NetCapabilities.BEARER_CELLULAR)
    .build();
// 建立数据网络,通过callback获取网络变更状态
netManager.setupSpecificNet(req, callback);

流量统计

场景介绍

应用通过调用API接口,可以获取蜂窝网络、所有网卡、指定应用或指定网卡的数据流量统计值。

接口说明

应用进行流量统计,所使用的接口主要由DataFlowStatistics提供。

表1 DataFlowStatistics的主要接口

image.png

开发步骤

调用DataFlowStatistics的接口可进行流量统计,以统计指定应用进程的流量为例。

long rx = DataFlowStatistics.getUidRxBytes(uid);
long tx = DataFlowStatistics.getUidTxBytes(uid);
// 进行数据收发
// 统计流量
rx = DataFlowStatistics.getUidRxBytes(uid) - rx;
tx = DataFlowStatistics.getUidTxBytes(uid) - tx;

管理HTTP缓存

场景介绍

应用重复打开一个相同网页时,可以优先从缓存文件里读取内容,从而减少数据流量,降低设备功耗,提升应用性能。


接口说明

管理HTTP缓存的功能主要由HttpResponseCache类提供。


表1 HttpResponseCache的主要接口


image.png

开发步骤

  1. 1.配置缓存目录及最大缓存空间。
  2. 2.保存缓存。
  3. 3.关闭缓存。
// 初始化时设置缓存目录dir及最大缓存空间
HttpResponseCache.install(dir, 10 * 1024 * 1024);
// 访问URL
// 为确保缓存保存到文件系统可以执行flush操作
HttpResponseCache.getInstalled().flush();
// 结束时关闭缓存
HttpResponseCache.getInstalled().close();
相关实践学习
部署高可用架构
本场景主要介绍如何使用云服务器ECS、负载均衡SLB、云数据库RDS和数据传输服务产品来部署多可用区高可用架构。
Sqoop 企业级大数据迁移方案实战
Sqoop是一个用于在Hadoop和关系数据库服务器之间传输数据的工具。它用于从关系数据库(如MySQL,Oracle)导入数据到Hadoop HDFS,并从Hadoop文件系统导出到关系数据库。 本课程主要讲解了Sqoop的设计思想及原理、部署安装及配置、详细具体的使用方法技巧与实操案例、企业级任务管理等。结合日常工作实践,培养解决实际问题的能力。本课程由黑马程序员提供。
相关文章
|
21天前
|
开发者
鸿蒙开发:资讯项目实战之项目初始化搭建
目前来说,我们的资讯项目只是往前迈了很小的一步,仅仅实现了项目创建,步虽小,但概念性的知识很多,这也是这个项目的初衷,让大家不仅仅可以掌握日常的技术开发,也能让大家理解实际的项目开发知识。
鸿蒙开发:资讯项目实战之项目初始化搭建
|
15天前
|
缓存 JavaScript IDE
鸿蒙开发:基于最新API,如何实现组件化运行
手动只是让大家了解切换的原理,在实际开发中,可不推荐手动,下篇文章,我们将通过脚本或者插件,快速实现组件化模块之间的切换,实现独立运行,敬请期待!
鸿蒙开发:基于最新API,如何实现组件化运行
|
21天前
|
SQL 弹性计算 数据库
鸿蒙5开发宝藏案例分享---优化应用时延问题
鸿蒙性能优化指南来了!从UI渲染到数据库操作,6大实战案例助你提升应用流畅度。布局层级优化、数据加载并发、数据库查询提速、相机资源延迟释放、手势识别灵敏调整及转场动画精调,全面覆盖性能痛点。附赠性能自检清单,帮助开发者高效定位问题,让应用运行如飞!来自华为官方文档的精华内容,建议收藏并反复研读,共同探讨更多优化技巧。
|
21天前
|
缓存
鸿蒙5开发宝藏案例分享---Swiper组件性能优化实战
本文分享了鸿蒙系统中Swiper组件的性能优化技巧,包括:1) 使用`LazyForEach`替代`ForEach`实现懒加载,显著降低内存占用;2) 通过`cachedCount`精准控制缓存数量,平衡流畅度与内存消耗;3) 利用`onAnimationStart`在抛滑时提前加载资源,提升构建效率;4) 添加`@Reusable`装饰器复用组件实例,减少创建开销。实际应用后,图库页帧率从45fps提升至58fps,效果显著。适合处理复杂列表或轮播场景,欢迎交流经验!
|
21天前
|
缓存 JavaScript 前端开发
鸿蒙5开发宝藏案例分享---Web开发优化案例分享
本文深入解读鸿蒙官方文档中的 `ArkWeb` 性能优化技巧,从预启动进程到预渲染,涵盖预下载、预连接、预取POST等八大优化策略。通过代码示例详解如何提升Web页面加载速度,助你打造流畅的HarmonyOS应用体验。内容实用,按需选用,让H5页面快到飞起!
|
21天前
|
数据库
鸿蒙5开发宝藏案例分享---跨线程性能优化指南
本文深入探讨鸿蒙系统跨线程序列化性能优化,借助DevEco Profiler工具定位序列化瓶颈。通过Sendable接口改造、数据瘦身等方法,将5万本书对象的序列化耗时从260ms+降至<8ms,甚至<1ms。总结避坑经验,建议常态化使用Profiler检测,避免传递大对象,提升多线程开发效率。
|
缓存 数据管理 Shell
鸿蒙5开发宝藏案例分享---性能分析简介
鸿蒙开发资源大揭秘!文中整理了HarmonyOS官方提供的100+场景化案例,涵盖性能优化、UI设计、设备适配等全链路内容。重点解析三大神级案例:折叠屏悬停交互、万人列表流畅滚动和服务卡片实时刷新,附带完整代码与避坑指南。通过精准搜索、代码移植和调试技巧,高效利用这些宝藏资源,助你省时省力避开开发陷阱。更有抖音级短视频流畅度优化方案等彩蛋等待探索!
|
21天前
|
Java
鸿蒙5开发宝藏案例分享---性能检测工具揭秘
鸿蒙性能优化工具全揭秘!本文详解官方隐藏的性能调优利器,包括静态检测(Code Linter)与动态检测(AppAnalyzer)。通过实战案例解析稀疏数组陷阱、循环更新状态变量等问题,并提供优化方案。同时附带高频性能规则速查表及黄金法则,助你高效避坑。开发时建议双开工具,实时检测问题,提升应用性能。
|
18天前
|
JSON 中间件 Go
Go 网络编程:HTTP服务与客户端开发
Go 语言的 `net/http` 包功能强大,可快速构建高并发 HTTP 服务。本文从创建简单 HTTP 服务入手,逐步讲解请求与响应对象、URL 参数处理、自定义路由、JSON 接口、静态文件服务、中间件编写及 HTTPS 配置等内容。通过示例代码展示如何使用 `http.HandleFunc`、`http.ServeMux`、`http.Client` 等工具实现常见功能,帮助开发者掌握构建高效 Web 应用的核心技能。
150 61
|
21天前
|
存储 C++ UED
鸿蒙5开发宝藏案例分享---优化应用包体积大小问题
本文分享了鸿蒙应用包体积优化的实用技巧,包括SO库压缩、HSP动态共享包、OHPM依赖冲突解决、按需加载和扫描工具定位优化点等方法。通过具体配置示例和实战经验,如启用`compressNativeLibs`、使用共享资源包、强制统一依赖版本以及动态导入功能模块,帮助开发者显著减少包体积,提升用户体验。文中还提供了图标优化、资源混淆和无用代码剔除等补充建议,助力打造更轻量的鸿蒙应用。

热门文章

最新文章

AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等

登录插画

登录以查看您的控制台资源

管理云资源
状态一览
快捷访问