HarmonyOS 鸿蒙Next 实现后台获取数据但导致app很卡怎么解决呢

发布于 1周前 作者 itying888 来自 鸿蒙OS

HarmonyOS 鸿蒙Next 实现后台获取数据但导致app很卡怎么解决呢

日志一直显示很多数据

 [http_exec.cpp:403] taskid=-2147473760, size:0, dns:0.229, connect:3.921, tls:0.000, firstSend:0.182, firstRecv:13.584, total:17.951, redirect:0.000, errCode:0, RespCode:200, httpVer:2, method:POST, osErr:0
 [http_exec.cpp:403] taskid=-2147473759, size:0, dns:0.136, connect:0.000, tls:0.000, firstSend:0.204, firstRecv:13.369, total:13.744, redirect:0.000, errCode:0, RespCode:200, httpVer:2, method:POST, osErr:0
 [http_exec.cpp:403] taskid=-2147473757, size:27, dns:0.199, connect:0.000, tls:0.000, firstSend:0.214, firstRecv:8.154, total:8.600, redirect:0.000, errCode:0, RespCode:200, httpVer:2, method:POST, osErr:0
我拿出来其中三条,但是看不懂是什么意思,怎么解决才使我的应用软件不那么卡,只要我的软件稍微和后台交互就卡死,然后强退。


更多关于HarmonyOS 鸿蒙Next 实现后台获取数据但导致app很卡怎么解决呢的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html

7 回复

强退可能是应用内代码逻辑出错,导致的闪退。当代码抛出异常,没有对该异常进行捕获和操作会导致异常最终被抛到系统执行层面导致闪退。需要看下闪退时的异常日志,后台数据查询后的处理是否有异常。

可以在UIAbility里查询上次退出的原因

import { UIAbility, Want, AbilityConstant } from '@kit.AbilityKit';

class MyAbility extends UIAbility {
  onCreate(want: Want, launchParam: AbilityConstant.LaunchParam) {
    if (launchParam.lastExitReason === AbilityConstant.LastExitReason.APP_FREEZE) {
      console.log('The ability has exit last because the ability was not responding.');
    }
    if (launchParam.lastExitReason === AbilityConstant.LastExitReason.RESOURCE_CONTROL) {
      console.log('The ability has exit last because the rss control,the lastExitReason is '+  launchParam.lastExitReason + ', the lastExitMessage is ' + launchParam.lastExitMessage);
    }
  }
}

参考文档:https://developer.huawei.com/consumer/cn/doc/harmonyos-references-V5/js-apis-app-ability-abilityconstant-V5#lastexitreason

更多关于HarmonyOS 鸿蒙Next 实现后台获取数据但导致app很卡怎么解决呢的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


强退不是重点只是有时候会出现,但是UI界面和后台服务器交互就会卡,想不通到底问题出现在哪。

检查您的应用在进行HTTP请求时是否有资源管理方面的问题,例如图片或视频等大型资源的处理。如果在请求过程中加载或处理大量资源,可能会导致应用卡顿。或者短时间有大量频繁的HTTP请求时吗。或者获取到数据后有没有更新大量UI。可以的话贴下你请求后台服务器的代码吧

你这里使用await等待一个Promise对象的解析,并返回其解析值了,改成下面这样试下

static fetchUnLoginUsers(mgId: string): Promise<AxiosResponse<SignUserListResponse>> { try { const response: Promise<AxiosResponse> = axios.post<SignUserListResponse>( 127.0.0.1/check_in.php?act=get_all_user_list, null, { params: { mgID: mgId } } ); return response; } catch (error) { console.error(‘Error fetching unlogged users:’, error instanceof Error ? error.message : ‘Unknown error’); throw new Error(‘Error fetching unlogged users’); } }

调用的地方放在UI界面做处理,更新页面UI吧 const unLoginUsersResponse: Promise<AxiosResponse> = FetchApiService.fetchUnLoginUsers(mgId); unLoginUsersResponse.then((result:AxiosResponse<SignUserListResponse>) => { result.data }).catch((error: BusinessError) => { console.error(error.message); })

你的应用在进行后台请求时需要等待响应,就会造成界面卡顿,特别是当 UI 线程被阻塞时,这可能是后台获取的数据太多,可以优化下后台数据查询,也可以通过异步方式去请求

我是用的异步的方式去请求的,怎么实现后台数据查询噢。

HarmonyOS 鸿蒙Next 在实现后台获取数据时,若导致应用卡顿,通常是由于多线程或异步处理不当所致。以下是一些可能的原因及解决方案:

  1. 任务优先级管理:确保后台数据获取任务使用低优先级线程或任务队列,避免与前台UI操作竞争资源。

  2. 资源同步:检查数据获取与UI更新之间的资源同步机制,避免锁竞争或死锁。使用适当的并发控制结构,如信号量或条件变量。

  3. 内存管理:确保后台任务不会泄漏内存或消耗过多资源。定期清理不再使用的对象,避免内存膨胀。

  4. 网络优化:优化网络请求,减少数据量和请求频率。使用HTTP/2或更高版本协议,提高传输效率。

  5. 异步回调:使用异步回调机制处理网络响应,避免阻塞主线程。确保回调中只进行必要的UI更新,避免复杂计算。

  6. 任务拆分:将大型任务拆分为多个小任务,逐步处理,避免一次性加载过多数据导致应用卡顿。

  7. 日志分析:通过日志分析定位性能瓶颈,找出导致卡顿的具体操作或代码段。

如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html

回到顶部