android实战之感知型组件的最佳实践

引言

  • 使界面控制器(activity 和 fragment)尽可能保持精简。它们不应试图获取自己的数据,而应使用 ViewModel 执行此操作,同时应观测 LiveData 对象以在视图中体现相应变化。
  • 设法编写数据驱动型界面,在此类界面中,界面控制器负责随着数据的更改更新视图,或者向 ViewModel 通知用户的操作。
  • 将数据逻辑放在 ViewModel 类中。ViewModel 应充当界面控制器与应用其余部分之间的连接器。不过要注意,ViewModel 不负责提取数据(例如,从网络提取)。但是,ViewModel 应调用相应的组件来提取数据,然后将结果提供给界面控制器。
  • 使用数据绑定在视图与界面控制器之间维持干净的接口。这样可以让视图更具声明性,并尽量减少需要在 activity 和 fragment 中编写的更新代码。如果您更愿意使用 Java 编程语言来达成此目的,请使用 Butter Knife 之类的库,以避免样板代码并实现更好的抽象化。
  • 避免在 ViewModel 中引用 View 或 Activity 上下文。如果 ViewModel 存在的时间比 activity 更长(在配置更改的情况下),activity 将泄漏并且不会获得垃圾回收器的妥善处置。

可以根据原则进行实战啦 。

自定义LifecycleOwner

public class MyActivity extends Activity implements LifecycleOwner {private LifecycleRegistry lifecycleRegistry;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);lifecycleRegistry = new LifecycleRegistry(this);lifecycleRegistry.markState(Lifecycle.State.CREATED);}@Overridepublic void onStart() {super.onStart();lifecycleRegistry.markState(Lifecycle.State.STARTED);}@NonNull@Overridepublic Lifecycle getLifecycle() {return lifecycleRegistry;}
}

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Spring Boot 框架能够解决什么问题?

Spring Boot 是基于 Spring 框架的一个子项目,它旨在简化 Java 开发中的配置和部署过程,提供一种快速、敏捷的开发方式。Spring Boot 的设计理念是约定优于配置,通过默认配置和自动化,使得开发者能够更专注于业务逻辑的实现&#…

数据挖掘任务一般流程

数据挖掘是从大量数据中提取有价值信息的过程。它涉及多个步骤,每一步都对整个数据挖掘过程至关重要。以下是数据挖掘任务的一般流程: 业务理解: 确定业务目标。评估当前情况。定义数据挖掘问题。制定一个初步计划来达到这些目标。 数据理…

WPF-附加属性《十二》

非常重要 依赖属性和附加属性,两者是有关系的,也是有些区别的,很多时候,可能会把两者混淆了。 附加属性(Attach Property) 顾名思义,就是附加上面的属性,自身是没有的,…

android studio 编译老项目失败问题处理

Unsupported Java. Your build is currently configured to use Java 17.0.6 and Gradle 6.7.1. Possible solution: - Upgrade Gradle wrapper to 7.2 version and re-import the project 假如的错误是上面的内容,请检查一下你的JDK版本是不是太高了&#xff0…

人工智能在红斑狼疮应用主要以下4个方面

人工智能(Artificial Intelligence, AI)在医学领域的应用已取得了一定的进展。红斑狼疮(Systemic Lupus Erythematosus, SLE)是一种免疫系统性疾病,对该疾病进行诊断和治疗是一个复杂的过程。人工智能可以发挥作用&…

如何在Centos 7环境下安装MySQL并登录

目录 先获取MySQL官方yum源 然后正常使用yum命令下载mysql即可完成MySQL的下载 使用mysql客户端登录mysqld服务端 能够登录mysql客户端后,我们最后还需要做一点配置 先获取MySQL官方yum源(包括对yum源的介绍) 介绍一下yum源 yum源就是一…

瞳孔检测眼动追踪python实现(基于dlib)

效果展示: 原图:(图片来自 b站up 借我300去洗牙) dlib实现的特征点检测 瞳孔检测结果 完整代码: # encoding:utf-8import dlib import numpy as np import cv2def rect_to_bb(rect): # 获得人脸矩形的坐标信息x …

服务器感染了.locked、.locked1勒索病毒,如何确保数据文件完整恢复?

尊敬的读者: .locked、.locked1勒索病毒是当前网络安全威胁中备受关注的一种恶意软件。本文将深入介绍.locked、.locked1勒索病毒的特征,有效的数据恢复方法,以及一系列预防措施,以帮助用户更好地保护自己的数字资产。面对复杂的…

深入理解人工智能中的图神经网络:原理、应用与未来展望

导言: 图神经网络(Graph Neural Networks, GNNs)作为人工智能领域的一项前沿技术,在社交网络分析、推荐系统、生物信息学等多个领域展现出卓越的性能。本文将深入剖析图神经网络的原理、当前应用场景以及未来可能的发展方向。 1.…

swing快速入门(十二)

注释很详细,直接上代码 上一篇 新增内容 1.Box容器和BroadLayout布局管理器的结合用法 2.textArea(多行文本域) 3.Choice(下拉选择栏) 4. CheckboxGroup(多项单选选择框) 5. Checkbox&…

循环神经网络-1

目录 1 数据集构建 1.1 数据集的构建函数 1.2 加载数据并进行数据划分 1.3 构造Dataset类 2 模型构建 2.1 嵌入层 2.2 SRN层 2.3 线性层 2.4 模型汇总 3 模型训练 3.1 训练指定长度的数字预测模型 3.2 多组训练 3.3 损失曲线展示 4 模型评价 总结 参考文献 循环神经网络&…

从零开始:前端架构师的基础建设和架构设计之路

文章目录 一、引言二、前端架构师的职责三、基础建设四、架构设计思想五、总结《前端架构师:基础建设与架构设计思想》编辑推荐内容简介作者简介目录获取方式 一、引言 在现代软件开发中,前端开发已经成为了一个不可或缺的部分。随着互联网的普及和移动…

postman中Test断言介绍

Test断言 一,常用断言:1)Status code:Code is 200 检查返回的状态码是否为2002)Response body:Contains string 检查响应中包括指定字符串3)Response body:Json value check 检查响应中其中json的值4)Respo…

简洁高效的 NLP 入门指南: 200 行实现 Bert 文本分类 (TensorFlow 版)

简洁高效的 NLP 入门指南: 200 行实现 Bert 文本分类 TensorFlow 版 概述NLP 的不同任务Bert 概述MLM 任务 (Masked Language Modeling)TokenizeMLM 的工作原理为什么使用 MLM NSP 任务 (Next Sentence Prediction)NSP 任务的工作原理NSP 任务栗子NSP 任务的调整和局限性 安装和…

【UE5.2】从零开始控制角色移动、游泳、下潜、上浮

目录 效果 步骤 一、项目准备 二、控制角色移动 三、控制角色游泳 四、实现角色潜水、上浮 五、解决在水面上浮的Bug 效果 步骤 一、项目准备 1. 新建一个空白工程,创建一个Basic关卡,添加第三人称游戏资源到内容浏览器 2. 在插件中启用“W…

2023 年安徽省职业院校技能大赛信息安全管理与评估项目技术规范

2023 年安徽省职业院校技能大赛(高职组) “信息安全管理与评估”项目技术规范 一、竞赛项目行业、职业技术标准 本赛项涉及的信息网络安全工程在设计、组建过程中,主要有以下 9 项国家或国际标准,参赛队在实施竞赛项目中要求遵循…

Python连接MySQL数据库操作指南

Python是一种非常流行的编程语言,它可以连接和操作多种类型的数据库。其中,MySQL是一种广泛使用的关系型数据库管理系统,它可以存储大规模数据,并支持高并发访问。在本文中,我们将介绍如何使用Python连接和操作MySQL数…

IDEA——还在手动new对象set值嘛,GenerateAllSetter插件帮你解决!!!

IDEA插件 一、GenerateAllSetter插件介绍二、如何下载安装三、如何使用 总结 最近项目上有些测试需要有很多属性,而且大部分的属性都是要设置值的,一个一个手动set设值很繁琐,就想着有没有能解决这个问题的办法,就发现了一个非常好…

HarmonyOS(十二)——全面认识HarmonyOS三种渲染控制

渲染控制概述 ArkUI通过自定义组件的build()函数和builder装饰器中的声明式UI描述语句构建相应的UI。在声明式描述语句中开发者除了使用系统组件外,还可以使用渲染控制语句来辅助UI的构建,这些渲染控制语句包括控制组件是否显示的条件渲染语句&#xff…

微软Microsoft二面面试题分享通过总结(不是标准答案分享

误打误撞 我写的shitty代码 当年面试算法开发岗竟然通过了 Background 先说下背景,软件工程本科毕业之后,当年8月到北欧读两年制硕士。面试发生在当年的11月,微软哥本哈根,location在丹麦的哥本哈根lingby(是不是这么…