【uniapp原生】实时记录接口请求延迟,并生成写入文件到安卓设备

在开发实时数据监控应用时,记录接口请求的延迟对于性能分析和用户体验优化至关重要。本文将基于 UniApp 框架,介绍如何实现一个实时记录接口请求延迟的功能,并深入解析相关代码的实现细节。

前期准备&必要的理解

1. 功能概述

该功能的核心在于定时发送网络请求记录请求的延迟时间,并将延迟数据实时写入本地文件。以下是主要步骤:

  1. 定时发送请求:使用 setInterval 每秒发送一次网络请求。
  2. 记录延迟时间:通过记录请求发送前后的时间差,计算网络延迟。
  3. 写入本地文件:将延迟数据以 JSON 或 TXT 格式追加写入本地文件,以便后续分析。

在这里插入图片描述

2. 关键代码解析

写入APP.vue中的关键代码片段:

export default {
  data() {
    return {
      intervalId: null, // 用于存储定时器的ID
    };
  },
  computed: {
    carCode() {
      return this.$store.state.carCode;
    },
  },
    onShow() {
    let isLogin = uni.getStorageSync("isLogin");
    console.log("App Show", isLogin);
    // 息屏开启后--重启轮询
    if (isLogin == "yes") {
      this.$store.dispatch("restartPolling");
    } else {
      this.$store.dispatch("stopPolling");
    }
    // 启动定时器,每秒执行一次网络延迟检测
    this.intervalId = setInterval(() => {
      this.checkNetworkLatency();
    }, 1000);
  },
  onHide() {
    console.log("App Hide");
    this.$store.dispatch("stopPolling");

    if (this.intervalId) {
      clearInterval(this.intervalId);
      this.intervalId = null;
    }
  },
  onUnload() {
    clearInterval(this.timer);
    this.$store.dispatch("stopPolling");
  },
  methods: {
    // 创建空文件(仅在 APP-PLUS 环境下有效)
    createEmptyFile(fileNamePath) {
      const File = plus.android.importClass("java.io.File");
      try {
        const file = new File(fileNamePath);
        if (file.exists()) {
          file.delete();
          console.log("已删除现有文件");
        }
        file.createNewFile();
        console.log("空文件创建成功");
        return true;
      } catch (e) {
        console.error("创建文件失败:", e);
        return false;
      }
    },
    // 追加数据到文件(仅在 APP-PLUS 环境下有效)
    appendToFile(data, fileNamePath) {
      const File = plus.android.importClass("java.io.File");
      const FileOutputStream = plus.android.importClass("java.io.FileOutputStream");
      const OutputStreamWriter = plus.android.importClass("java.io.OutputStreamWriter");
      const BufferedWriter = plus.android.importClass("java.io.BufferedWriter");

      try {
        const file = new File(fileNamePath);
        const fos = new FileOutputStream(file, true); // true 表示追加模式
        const osw = new OutputStreamWriter(fos);
        const bw = new BufferedWriter(osw);

        const line = JSON.stringify(data) + "\n";
        bw.write(line);

        bw.close();
        osw.close();
        fos.close();
        return true;
      } catch (e) {
        console.error("写入文件失败:", e);
        return false;
      }
    },
    // 网络延迟检测函数
    checkNetworkLatency() {
      const startTime = new Date().getTime();
      const url = "/logistics/bulletinBoard/getWeather/440700";

      uni.request({
        url: url,
        method: "GET",
        success: (res) => {
          const latency = new Date().getTime() - startTime;

          const data = {
            dataTime: res.data.timestamp,
            networkLatency: `${latency} ms`,
            carCode: this.carCode,
          };

          // 仅在 APP-PLUS 环境下写入文件
          // #ifdef APP-PLUS
          this.appendToFile(data, "/storage/emulated/0/Download/networkLatency.text");
          // #endif

          this.networkLatency = `${latency} ms`;
        },
        fail: (error) => {
          console.error("网络请求失败:", error);
          this.networkLatency = "检测失败";
        },
      });
    },
  },
};
3. 详细说明
  1. 定时器初始化

    • mounted 生命周期钩子中,初始化 USB 设备连接(如果需要)。
    • onShow 生命周期钩子中,启动定时器,每秒调用一次 checkNetworkLatency 函数。
  2. 网络延迟检测

    • checkNetworkLatency 函数首先记录当前时间 startTime
    • 使用 uni.request 发送 GET 请求到指定的 URL。
    • 在请求成功的回调中,计算延迟时间 latency
    • 将延迟数据封装成对象 data,并通过 appendToFile 方法将其追加写入本地文件。
    • 更新组件中的 networkLatency 数据,以便在界面上实时显示。
  3. 文件操作

    • createEmptyFile 方法用于在指定路径创建空文件。如果文件已存在,则先删除再创建。
    • appendToFile 方法用于将数据以 JSON 格式追加写入文件。使用 BufferedWriter 可以提高写入效率。
  4. 生命周期管理

    • onHideonUnload 生命周期钩子中,清除定时器,停止轮询,并停止轮询操作。这有助于节省资源,避免不必要的网络请求。
4. 优化建议
  1. 错误处理

    • 在文件操作和网络请求中添加更多的错误处理逻辑,确保应用的稳定性。例如,处理文件写入失败、网络请求超时等情况。
  2. 性能优化

    • 考虑使用节流(throttling)或防抖(debouncing)技术,避免在高频率的网络请求中频繁写入文件。
    • 可以在内存中缓存一定量的延迟数据,然后批量写入文件,减少磁盘 I/O 操作。
  3. 数据可视化

    • 为了更直观地展示延迟数据,可以在界面上添加图表或统计信息。例如,使用图表库(如 ECharts)实时绘制延迟趋势图。
  4. 数据存储

    • 除了写入本地文件,还可以考虑使用本地数据库(如 SQLite)来存储延迟数据,以便更高效地查询和管理。
  5. 权限管理

    • 确保应用具有写入存储的权限,特别是在 Android 平台上,需要在 manifest 文件中声明相关权限,并在运行时请求用户授权。
5. 总结

通过以上步骤,您可以在 UniApp 应用中实现一个实时记录接口请求延迟的功能。这不仅有助于监控应用的性能,还能为后续的优化提供数据支持。根据具体需求,您可以进一步扩展和优化该功能,例如增加数据持久化、集成图表展示等。

希望本文对您有所帮助,祝您开发顺利!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/979512.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

基于机器学习的结构MRI分析:预测轻度认知障碍向阿尔茨海默病的转化

摘要 阿尔茨海默病是一种致残性神经退行性疾病,目前尚无有效的治疗方法。预测阿尔茨海默病的诊断对患者的预后至关重要,但目前的阿尔茨海默病生物标志物检测方法具有侵入性、耗时且昂贵。因此,开发基于MRI的计算方法用于阿尔茨海默病的早期诊…

HTML——前端基础1

目录 前端概述 前端能做的事情​编辑 两步完成一个网页程序 前端工具的选择与安装 HTML HTML5介绍 HTML5的DOCTYPE声明 HTML基本骨架 文字标签 标题之标签 标签之段落、换行、水平线 标签之图片 标签之超文本链接 标签之文本 列表标签之有序列表 列表标签之无序…

量子计算可能改变世界的四种方式

世界各地的组织和政府正将数十亿美元投入到量子研究与开发中,谷歌、微软和英特尔等公司都在竞相实现量子霸权。 这其中的利害关系重大,有这么多重要的参与者,量子计算机的问世可能指日可待。 为做好准备,,我们必须了…

Jsmoke-一款强大的js检测工具,浏览器部署即用,使用方便且高效

目录标题 Jsmoke 🚬🚬 by Yn8rt使用方式界面预览功能特性支持的敏感信息类型 Jsmoke 🚬🚬 by Yn8rt ​ 该插件由 Yn8rt师傅 开发,插件可以理解为主动版的hae和apifinder,因为其中的大多数规则我都引用了&a…

让Word插上AI的翅膀:如何把DeepSeek装进Word

在日常办公中,微软的Word无疑是我们最常用的文字处理工具。无论是撰写报告、编辑文档,还是整理笔记,Word都能胜任。然而,随着AI技术的飞速发展,尤其是DeepSeek的出现,我们的文字编辑方式正在发生革命性的变…

HarmonyOS 5.0应用开发——多线程Worker和@Sendable的使用方法

【高心星出品】 文章目录 多线程Worker和Sendable的使用方法开发步骤运行结果 多线程Worker和Sendable的使用方法 Worker在HarmonyOS中提供了一种多线程的实现方式,它允许开发者在后台线程中执行长耗时任务,从而避免阻塞主线程并提高应用的响应性。 S…

《深度学习实战》第3集:循环神经网络(RNN)与序列建模

第3集:循环神经网络(RNN)与序列建模 引言 在深度学习领域,处理序列数据(如文本、语音、时间序列等)是一个重要的研究方向。传统的全连接网络和卷积神经网络(CNN)难以直接捕捉序列中…

10.【线性代数】—— 四个基本子空间

十、 四个基本子空间 1. 列空间 C ( A ) C(A) C(A) in R m R^m Rm2. 零空间 N ( A ) N(A) N(A) in R n R^n Rn3. 行空间 C ( A T ) C(A^T) C(AT) in R n R^n Rn4. 左零空间 N ( A T ) N(A^T) N(AT) in R m R^m Rm综述5. 新的向量空间 讨论矩阵 A m ∗ n A_{m*n} Am∗n​…

Windows上使用go-ios实现iOS17自动化

前言 在Windows上运行iOS的自动化,tidevice对于iOS17以上并不支持,原因是iOS 17 引入新通信协议 ‌RemoteXPCQUIC‌,改变了 XCUITest 的启动方式。 一、go-ios的安装 1、安装命令:npm i go-ios 2、安装完成后输入命令which io…

CBAM注意力机制详解与实现

前言: 在深度学习领域,注意力机制已成为提升模型性能的重要手段之一。CBAM(Convolutional Block Attention Module)作为一种轻量级且高效的注意力机制,被广泛应用于各种卷积神经网络中。 一、CBAM注意力机制概述 1.…

GCN从理论到实践——基于PyTorch的图卷积网络层实现

Hi,大家好,我是半亩花海。图卷积网络(Graph Convolutional Network, GCN)是一种处理图结构数据的深度学习模型。它通过聚合邻居节点的信息来更新每个节点的特征表示,广泛应用于社交网络分析、推荐系统和生物信息学等领…

给虚拟机配置IP

虚拟机IP这里一共有三个地方要设置,具体说明如下: (1)配置vm虚拟机网段 如果不进行设置,每次启动机器时都可能是随机的IP,不方便我们后续操作。具体操作是:点击编辑→虚拟网络编辑器 选择VMne…

【免费】YOLO[笑容]目标检测全过程(yolo环境配置+labelimg数据集标注+目标检测训练测试)

一、yolo环境配置 这篇帖子是我试过的,非常全,很详细【cudaanacondapytorchyolo(ultralytics)】 yolo环境配置 二、labelimg数据集标注 可以参考下面的帖子,不过可能会出现闪退的问题,安装我的流程来吧 2.1 labelimg安装 label…

mapbox基础,使用geojson加载heatmap热力图层

👨‍⚕️ 主页: gis分享者 👨‍⚕️ 感谢各位大佬 点赞👍 收藏⭐ 留言📝 加关注✅! 👨‍⚕️ 收录于专栏:mapbox 从入门到精通 文章目录 一、🍀前言1.1 ☘️mapboxgl.Map 地图对象1.2 ☘️mapboxgl.Map style属性1.3 ☘️heatmap热力图层样式二、🍀使用geojs…

Python 课堂点名桌面小程序

一、场景分析 闲来无事,老婆说叫我开发一个课堂点名桌面小程序,给她在课堂随机点名学生问问题。 人生苦短,那就用 Python 给她写一个吧。 二、依赖安装 因为要用到 excel,所以安装两个依赖: pip install openpyxl…

蓝桥杯 路径之谜

路径之谜 题目描述 小明冒充 XX 星球的骑士,进入了一个奇怪的城堡。 城堡里边什么都没有,只有方形石头铺成的地面。 假设城堡地面是 nnnn 个方格。如下图所示。 按习俗,骑士要从西北角走到东南角。可以横向或纵向移动,但不能斜着走…

在鸿蒙HarmonyOS手机上安装hap应用

一、下载工具 安装hap包需要用到小工具 。 二、解压到目录后,进入该文件夹,打开命令行,如下图 三、将下载好的hap包放入刚才解压的文件夹内(假设hap包文件名为app.hap) 四、连接好手机和电脑,手机需要打…

Android APK组成编译打包流程详解

Android APK(Android Package)是 Android 应用的安装包文件,其组成和打包流程涉及多个步骤和文件结构。以下是详细的说明: 一、APK 的组成 APK 是一个 ZIP 格式的压缩包,包含应用运行所需的所有文件。解压后主要包含以…

自然语言处理:词频-逆文档频率

介绍 大家好,博主又来给大家分享知识了。本来博主计划完成稠密向量表示的内容分享后,就开启自然语言处理中文本表示的讲解。可在整理分享资料的时候,博主发现还有个知识点,必须得单独拎出来好好说道说道。 这就是TF-IDF&#xf…

esp8266 rtos sdk开发环境搭建

1. 安装必要的工具 1.1 安装 Git Git 用于从远程仓库克隆代码,你可以从Git 官方网站下载 Windows 版本的安装程序。安装过程中可保持默认设置,安装完成后,在命令提示符(CMD)或 PowerShell 中输入git --version&#…