当前位置: 首页 > news >正文

珠海网站制作策划天津多媒体设计公司

珠海网站制作策划,天津多媒体设计公司,常德市住房和城市建设局网站,电商系统的哪家好介绍 本示例介绍了通过应用事件打点hiAppEvent获取上一次应用异常信息的方法#xff0c;主要分为应用崩溃、应用卡死以及系统查杀三种。 效果图预览 使用说明#xff1a; 点击构建应用崩溃事件#xff0c;3s之后应用退出#xff0c;然后打开应用进入应用异常页面#x…介绍 本示例介绍了通过应用事件打点hiAppEvent获取上一次应用异常信息的方法主要分为应用崩溃、应用卡死以及系统查杀三种。 效果图预览 使用说明 点击构建应用崩溃事件3s之后应用退出然后打开应用进入应用异常页面隔1min左右后显示上次异常退出信息。点击构建应用卡死事件需手动退出然后打开应用进入应用异常页面隔1min左右后显示上次异常退出信息。 实现思路 构建应用异常。源码参考ApplicationException.ets handleOperate(index: number) {switch (index) {case 0:// 在按钮点击函数中构造一个APP_CRASH场景触发应用崩溃事件let result: object JSON.parse();break;case 1:// 在按钮点击函数中构造一个APP_FREEZE场景触发应用卡死事件,500ms之后执行无限循环while (true) {}}}应用退出后进入本页面等待订阅消息通知待收到订阅消息后通过EventSubscription.ets中的onReceive函数接收到异常信息数据 并通过AppStorage.setOrCreate(‘appEventGroups’,异常信息数据)双向绑定异常信息源码参考代码可参考EventSubscription.ets import hiAppEvent from ohos.hiviewdfx.hiAppEvent; import { logger } from ohos/base;const TAG: string eventSubscription;export function eventSubscription() {// 添加应用事件观察者方法可用于订阅应用事件hiAppEvent.addWatcher({// 开发者可以自定义观察者名称系统会使用名称来标识不同的观察者name: mst,// 开发者可以订阅感兴趣的系统事件此处是订阅了崩溃事件appEventFilters: [{domain: hiAppEvent.domain.OS,names: [hiAppEvent.event.APP_CRASH, hiAppEvent.event.APP_FREEZE]}],// TODO知识点获取事件组信息。开发者可以自行实现订阅实时回调函数以便对订阅获取到的事件数据进行自定义处理onReceive: async (domain: string, appEventGroups: ArrayhiAppEvent.AppEventGroup) {logger.info(TAG, HiAppEvent onReceive: domain${domain});// 获取事件组信息与ApplicationException文件中的StorageLink(faultMessage) faultMessage进行双向数据绑定AppStorage.setOrCreate(appEventGroups, appEventGroups);}}); }StorageLink(‘appEventGroups’)接收订阅事件函数传递的事件组信息调用getFaultMessage函数对信息进行处理将处理后的信息通过 this.faultDataSource.pushData(message) 添加到懒加载数据源中并通过this.faultDataSource.persistenceStorage()执行持久化存储最后通过使用LazyForEach将数据信息加载到页面上。 具体源码参考ApplicationException.ets Component struct FaultArea {// 懒加载数据源State faultDataSource: FaultDataSource new FaultDataSource();// 双向数据绑定懒加载数据源的数组长度StorageLink(faultDataSourceLength) faultDataSourceLength: number 0;// 双向数据绑定事件组与AppStorage.setOrCreate进行绑定此变量发生变化触发getFaultMessage函数StorageLink(appEventGroups) Watch(getFaultMessage) appEventGroups: ArrayhiAppEvent.AppEventGroup [];Consume eventIndex: number;async aboutToAppear() {logger.info(TAG, aboutToAppear start);// 获取Preferences实例PreferencesManager.getPreferences(this.faultDataSource);}// 获取应用异常信息async getFaultMessage() {logger.info(TAG, getAppEventGroups start);if (this.appEventGroups this.appEventGroups.length 0) {// 遍历事件组this.appEventGroups.forEach((eventGroup: hiAppEvent.AppEventGroup) {// 遍历事件对象集合eventGroup.appEventInfos.forEach(async (eventInfo: hiAppEvent.AppEventInfo) {let message: string ;message HiAppEvent eventInfo.domain${eventInfo.domain}\n // 事件领域 HiAppEvent eventInfo.name${eventInfo.name}\n // 事件名称 HiAppEvent eventInfo.eventType${eventInfo.eventType}\n // 事件名称 HiAppEvent eventInfo.params.time${eventInfo.params[time]}\n // 事件发生的时间 HiAppEvent eventInfo.params.crash_type${eventInfo.params[crash_type]}\n HiAppEvent eventInfo.params.foreground${eventInfo.params[foreground]}\n HiAppEvent eventInfo.params.bundle_version${eventInfo.params[bundle_version]}\n HiAppEvent eventInfo.params.bundle_name${eventInfo.params[bundle_name]}\n HiAppEvent eventInfo.params.exception${JSON.stringify(eventInfo.params[exception])}\n HiAppEvent eventInfo.params.hilog.size${eventInfo.params[hilog].length}\n;// TODO知识点将异常信息存储到数组faultMessage当中this.faultDataSource.pushData(message);})})}// TODO知识点持久化存储异常信息集合this.faultDataSource.persistenceStorage();}build() {List() {// 添加判断如果异常信息集合的信息条数大于0遍历异常信息if (this.faultDataSourceLength 0) {// 性能动态加载数据场景可以使用LazyForEach遍历数据。https://developer.harmonyos.com/cn/docs/documentation/doc-guides-V3/arkts-rendering-control-lazyforeach-0000001524417213-V3LazyForEach(this.faultDataSource, (message: string) {ListItem() {Text(message).textAlign(TextAlign.Start)}}, (item: string) item)} else {ListItem() {// 根据被点击事件的下标响应指定的信息Text(this.eventIndex 0 ? $r(app.string.crash_event_message) :(this.eventIndex 1 ? $r(app.string.freeze_event_message) :(this.faultSign ? $r(app.string.data_delay_toast) :$r(app.string.no_message))))}}}.width(92%).height(300).shadow(ShadowStyle.OUTER_DEFAULT_SM).borderRadius($r(app.string.ohos_id_corner_radius_default_m)).padding($r(app.string.ohos_id_card_padding_start))} }以上代码中有引用懒加载数据类和持久化存储类源码可参考DataSource.ets和 PreferencesManager.ets。 // DataSource.ets export class FaultDataSource extends BasicDataSource {// 懒加载数据private faultMessage: Arraystring [];// TODO知识点获取懒加载数据源的数据长度totalCount(): number {return this.faultMessage.length;}// 获取指定数据项getData(index: number): string {return this.faultMessage[index];}// TODO知识点存储数据到懒加载数据源中pushData(data: string): void {this.faultMessage.push(data);// 在数组头部添加数据this.notifyDataAdd(this.faultMessage.length - 1);AppStorage.setOrCreate(faultDataSourceLength, this.totalCount());}// TODO知识点持久化存储异常信息集合persistenceStorage(): void {PreferencesManager.putFaultMessage(this.faultMessage);} }// PreferencesManager.ets/*** 存储数据异常信息* param faultMessage 异常信息集合*/public static putFaultMessage(faultMessage: Arraystring) {logger.info(putMessage start);try {// TODO知识点通过 dataPreferencesManager.put方法存储数据dataPreferencesManager.put(faultMessage, JSON.stringify(faultMessage), async (err: BusinessError) {if (err) {logger.error(Failed to put value of faultMessage. code err.code , message err.message);return;}logger.info(Succeeded in putting value of faultMessage.);dataPreferencesManager.flush();})} catch (err) {let code (err as BusinessError).code;let message (err as BusinessError).message;logger.error(Failed to put value of catch err. code err.code , message err.message);}}/*** 获取数据异常信息* param faultMessage 异常信息集合*/public static getFaultMessage(faultDataSource:FaultDataSource) {logger.info(getFaultMessage start);try {// TODO知识点通过dataPreferencesManager.get方法获取异常信息数据let promise dataPreferencesManager.get(faultMessage, []);promise.then(async (data: dataPreferences.ValueType) {if (typeof data string) {let faultData: Arraystring JSON.parse(data);// 将异常数据添加到懒加载数据源中faultData.forEach((item: string) {faultDataSource.pushData(item);})// 双向数据绑定懒加载数据源长度更新数据源长度AppStorage.setOrCreate(faultDataSourceLength,faultDataSource.totalCount())logger.info(Succeeded in getting value of faultMessage.);}})} catch (err) {logger.error(Failed to get value of catch err. code err.code , message err.message);}}高性能知识点 本示例使用了LazyForEach进行数据懒加载将叠加获取到的应用异常信息进行渲染。 工程结构模块类型 aplicationexception // har类型 |---model | |---DataSource.ets // 模型层-懒加载数据源 | |---EventSubscription.ets // 数据模型层-订阅应用事件 | |---MockData.ets // 数据模型层-模拟数据 | |---PreferencesManager.ets // 数据模型层-持久化存储 |---view | |---PreferencesManager.ets // 视图层-应用异常页面模块依赖 本实例依赖common模块来实现日志的打印、资源的调用以及公共组件FunctionDescription的引用。 参考资料 应用事件打点HiAppEvent 数据懒加载LazyForEach 为了能让大家更好的学习鸿蒙HarmonyOS NEXT开发技术这边特意整理了《鸿蒙开发学习手册》共计890页希望对大家有所帮助https://qr21.cn/FV7h05 《鸿蒙开发学习手册》https://qr21.cn/FV7h05 如何快速入门https://qr21.cn/FV7h05 基本概念构建第一个ArkTS应用…… 开发基础知识https://qr21.cn/FV7h05 应用基础知识配置文件应用数据管理应用安全管理应用隐私保护三方应用调用管控机制资源分类与访问学习ArkTS语言…… 基于ArkTS 开发https://qr21.cn/FV7h05 Ability开发UI开发公共事件与通知窗口管理媒体安全网络与链接电话服务数据管理后台任务(Background Task)管理设备管理设备使用信息统计DFX国际化开发折叠屏系列…… 大厂鸿蒙面试题https://qr21.cn/FV7h05 鸿蒙开发面试大盘集篇共计319页https://qr21.cn/FV7h05 1.项目开发必备面试题 2.性能优化方向 3.架构方向 4.鸿蒙开发系统底层方向 5.鸿蒙音视频开发方向 6.鸿蒙车载开发方向 7.鸿蒙南向开发方向
http://www.zqtcl.cn/news/149208/

相关文章:

  • 做外贸网站设计上需要注意什么python做音乐网站
  • 英语门户网站织梦源码wordpress 推荐插件
  • 学做衣服网站有哪些网站建设算入会计分录
  • 京东网站开发技术织梦网站如何做404
  • 论坛类网站开发屏蔽wordpress缩略图
  • 南宁市两学一做网站logo设计网站官网
  • 中国建设工程造价管理协会网站查询网站开发者的设计构想
  • 华强北网站建设设计素材网站p开头的
  • 怎样让网站快速收录利用数据库修改wordpress密码
  • 网站建设群发广告词做网站首页多少钱
  • 黑彩网站建设中企动力 网站价格
  • 上海营销型网站报价深圳企业网站制作设计
  • 网站清理通知北京电商购物网站
  • 新开传奇网站180合击创建一个个人网站需要多少钱
  • 郑州建网站哪家好深圳企业网站制作公司介绍
  • 企业网站百度收录桂林网站建设价格
  • 砀山做网站的公司wordpress微视频主题
  • 免费的企业网站cms注册网站后邮箱收到邮件
  • 网站推广排名教程怀化职院网站
  • 房产门户网站模板新手做电商怎么起步
  • 成都网站建设科技公沈阳网站建设技术公司排名
  • 自建商城网站上海有哪些网络公司
  • 朋友 合同 网站制作手机网站建设服务商
  • 链接分析属于网站开发棋牌软件开发定制
  • top域名的网站搭建网站步骤
  • 个人网站建设背景和目的海南省网站
  • 山西成宁做的网站义乌网站建设优化排名
  • 东莞网站建设公司辉煌大厦阿里云服务器官方网站
  • 域名注册网站制作自己建网站需要钱吗
  • 东莞市房管局官方网站域名查询ip网站