JectPack架构学习系列二_LiveData

音频质量评估指标全解析:从主观到客观的全面指南 本文全面解析了音频质量评估的核心指标,涵盖主观评价(如MOS、DMOS)与客观评价(如PESQ、STOI、SDR)。重点介绍了DNSMOS等AI驱动的无参考评估方法,并提供了根据语音通信、噪声抑制、语音分离等不同场景选择指标组合的实战指南,帮助开发者和研究者科学量化音频质量。 阅读详情

继JectPack架构学习系列一_ViewModel.  所有的用户界面数据放在ViewModel中管理,  还是不够. 每次数据改变的时候都需要驱动视图来驱动刷新控件.  比如用户按钮, 数据递增之后要改变数据 绑定数据.  那么ViewModel中的数据可以用LiveData来表示.  当数据发生改变的时候, 可以加一个观察者, 自动的刷新界面的数据, 从而减少交互,  Controller即是界面就进一步减少了简化

首先, 定义ViewModel:

package com.hzhztech.livedatatest.viewmodel;

import androidx.lifecycle.MutableLiveData;
import androidx.lifecycle.ViewModel;

public class ViewModelWithLiveData extends ViewModel {

    private MutableLiveData<Integer> liveDataNumber;

    public MutableLiveData<Integer> getLiveDataNumber() {
        if(liveDataNumber == null) {
            liveDataNumber = new MutableLiveData<>();
            liveDataNumber.setValue(0);
        }
        return liveDataNumber;
    }

    public void addLiveDataNumber(int n) {
        liveDataNumber.setValue(liveDataNumber.getValue() + n);
    }
}

然后在Controller中使用

package com.hzhztech.livedatatest

import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.widget.ImageButton
import android.widget.TextView
import androidx.lifecycle.Observer
import androidx.lifecycle.ViewModelProviders
import com.hzhztech.livedatatest.viewmodel.ViewModelWithLiveData
import kotlinx.android.synthetic.main.activity_main.*

class MainActivity : AppCompatActivity() {

    lateinit var viewModelWithLiveData: ViewModelWithLiveData

    lateinit var textView:TextView
    lateinit var imageButton:ImageButton
    lateinit var imageButton2:ImageButton

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        textView = findViewById(R.id.textView)
        imageButton = findViewById(R.id.imageButton)
        imageButton2 = findViewById(R.id.imageButton2)

        viewModelWithLiveData = ViewModelProviders.of(this).get(ViewModelWithLiveData::class.java)
        //LifecyclerOwener  activity就是拥有LifecyclerOwener的对象
        //observe 之后也不需要取消观察, 在activity销毁之后  系统会自动取消销毁
        viewModelWithLiveData.liveDataNumber.observe(this,object :Observer<Int> {
            override fun onChanged(t: Int?) {
                textView.text = t.toString()
            }

        })

        imageButton.setOnClickListener {
            viewModelWithLiveData.addLiveDataNumber(1)
        }
        imageButton2.setOnClickListener {
            viewModelWithLiveData.addLiveDataNumber(-1)
        }

    }
}

observe函数非常关键

在控制器中对MutableLiveData 进行观察, 那么程序的独立性进一步得到了提升

第 2 章:PassThrough 直通滤波 通过设置某个维度(如 x、y、z 或 rgb)的取值范围,仅保留该范围内的点,从而达到**点云裁剪(裁边)**或过滤异常值的目的。所有在该范围之外的点会被移除(可选是否保留);点云中包含背景、地面或传感器噪声,需要过滤;通过 z 轴过滤,只保留桌面上方的物体;多轴组合过滤(如同时过滤 x、y、z);可用于地面剔除、车载点云预处理等场景。不支持一次过滤多个字段,可多次调用;仅处理某一层或某一区域的点云数据。原始点云中包含地面、墙面、背景等;在区域裁剪、前景提取中广泛使用;设定一个轴(如z轴); 阅读详情

相关推荐

UART中断接收的实战陷阱:HAL库常见误区与性能调优指南

本文深入解析STM32 HAL库UART中断接收机制,揭示常见实战陷阱如数据溢出、中断优先级配置不当等,并提供性能调优方案。重点介绍如何使用空闲中断处理不定长数据、DMA与中断混合模式优化,以及工业级错误恢复与流量控制策略,帮助开发者构建稳定可靠的串口通信系统。

pea55的博客 747

android轻量级业务开发框架jectpack-Mvvm

前言 jectpack从发布以来,一直备受好评,旗下组件可单独使用,也可以协同工作,当使用kotlin语言特性时,可以提高效率。网上已经有很多关于jectpack的文章,那么这里为什么还有要写呢?主要原因是记录、总结、交流,并且以此搭建一个基于jectpack的mvvm快速开发框架,或者快速开发模块 JectPack官方介绍 1.架构搭建 1.1架构介绍 基于MVVM模式用了 kotlin+协程+retrofit+livedata+DataBinding+dagger,是基于Androidx 主要封

浮世三千 3552

别再自己写组件了!用uni-app的midButton属性5分钟搞定中间凸起TabBar(H5/小程序通用)

本文详细介绍了uni-app官方提供的midButton属性,帮助开发者5分钟内实现中间凸起的TabBar效果,无需编写繁琐的自定义组件代码。该方案兼容H5和微信小程序平台,配置简单且维护成本低,大幅提升开发效率和性能表现。

weixin_30431445的博客 347

JectPack的详细讲解分类

Jectpack是个组件库 引用自知乎大神的图片 目前总共有85个组件库 简单点分为三类 1:核心类(8个) 2:架构组件(10个) 3:ui组件(22个) 4:特殊业务组件(16个) 5:用不到的组件(15个) 6:弃用的组件(11个) 7:测试的组件(2个) ...

qq_24550911的博客 3004

【图数据库与知识图谱入门】2.2 图数据库 vs. 关系型数据库 vs. NoSQL数据库

本文对比了关系型数据库、NoSQL数据库和图数据库的核心差异与应用场景。关系型数据库以二维表结构为核心,适合结构化数据的事务处理(如MySQL),但多表关联查询性能随层级增加而下降。NoSQL数据库(如MongoDB)具有灵活schema,适合海量非结构化数据存储,但关联查询能力较弱。图数据库专注于节点-边关系建模,擅长处理复杂关联分析(如社交网络)。通过学生-课程案例展示了MySQL的多表JOIN操作和MongoDB的两种关联实现方式(内嵌文档和文档引用),揭示了不同数据库在数据关联处理上的本质区别。

kngines 1539

基于RK3588的高效音视频对讲系统设计与实现

本文详细介绍了基于RK3588芯片的高效音视频对讲系统设计与实现。文章深入剖析了RK3588在8K编解码、高性能音频DSP及丰富接口方面的优势,并提供了从开发环境搭建、分层软件架构设计,到视频采集编码、音频回声消除及低延迟网络传输的完整实战指南,旨在帮助开发者充分利用该芯片硬件能力,构建稳定、低延迟的实时通信系统。

dapp9builder的博客 254

JectPack组件开发1------Lifecycle + LiveData(LiveDataBus)

在Android开发者平台中,对于JectPack的概述 Jetpack 是一套库、工具和指南,可帮助开发者更轻松地编写优质应用。这些组件可帮助您遵循最佳做法、让您摆脱编写样板代码的工作并简化复杂任务,以便您将精力集中放在所需的代码上。 Jetpack 包含与平台 API 解除捆绑的 androidx.* 软件包库。这意味着,它可以提供向后兼容性,且比 Android 平台的更新频率更高,以此确...

qq_33235287的博客 1280

从IR Drop到EM分析:数字IC电源规划中那些没人明说的细节(以MTCMOS配置为例)

本文深入探讨数字IC后端设计中电源规划的关键细节,特别关注MTCMOS配置、电源网络电阻最小化和level shifter供电等实战技巧。通过分析IR Drop和EM问题,提供优化floorplan和powerplan的具体策略,帮助工程师避免常见陷阱,提升芯片设计的稳定性和可靠性。

q9w8e7r6t5的博客 511

Android jectpack compose最全解析【建议收藏】

动态展示UI:在执行过程之中不断的变化UI,就需要不断的对其进行验证,并且确保其依赖关系。还要保证生命周期内的依赖满足情况。紧耦合:一处代码影响多处,并且大概率情况是隐式,看起来毫无关联,实际有影响命令式UI:在编写UI代码时,随时都要考虑如何转换到对应的状态单继承:是否可以通过其他方式实现突破单继承的限制?代码膨胀:随着业务的不断扩展,如何控制代码膨胀?

m0_56255097的博客 2835

AD9361 FIR 滤波器设计

matlab 得到滤波器系数

weixin_44630490的博客 1万+

把收款差异从扯皮变成闭环:SAP S/4HANA Dispute Resolution 模块到底解决什么问题?

本文摘要: SAP S/4HANA的争议解决模块(Dispute Resolution)通过标准化流程管理企业应收争议,解决发票与收款差异问题。核心是创建可追踪的Dispute Case工单,明确处理角色(Processor和Manager),并与财务系统联动实现自动清账。系统支持手工/自动创建争议工单,通过动态默认值减少错误,并最终实现争议金额归零的闭环管理。文中给出制造业客户扣款的完整处理案例,并强调组织落地需统一权限与目录。最后提供ABAP代码示例展示如何通过BAPI创建争议工单。(150字)

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 162

Android进阶宝典 --- 最新LiveData LifeCycle源码解读

LiveData、LifeCycle源码分析

qq_33235287的博客 626

58.Sobel边缘检测算子

注:在梯度运算中,很可能会出现负的灰度值,我们不能再采用uint8类型作为像素的数据类型,而是采用了CV_16S或者CV_32F这种有负数范围的类型,运算结果里的负数也不能不处理,否则在显示的时候就会被截断为0,这样就会丢失边界信息。如下图所示,对中心像素Z5求取多个方向的灰度差分,对于Z5的8邻域,分为4个方向,即对角线和水平垂直4个方向对:(z1, z9) ,(z2, z8), (z3, z7), (z6, z4) 给定邻域方向梯度矢量g的幅度为:|g| = <像素灰度差分>/<相邻像素的距离>。

twnkie的博客 4884

JectPack架构学习系列三_Databinding

继JectPack架构学习系列二_LiveData第二章之后的第三章, 这一章我们重点讲讲Databinding. 当产品经理过来的时候, 说: 小何, 这个在界面不需要显示了, 这个按钮点击不是+1, 是+2 . 此时,我们是不是有一种想掏出一把长刀, 哈哈哈. 那么, 考虑到之前的模式MVC或者MVP, 当界面发生改变的时候, 修改xml修改界面, 因为Controler(界...

github_37217206的博客 649

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

浅谈MVVM架构(JectPack ViewModel + LiveData + DataBinding)

最近要新启动一个项目,准备使用MVVM架构搭建;在之前的文章中,提到过MVVM架构,在当前主流的框架中,渐渐的数据驱动UI、声明式UI(例如JetPack新出的Compose组件)会成为主流,在这里先谈一下MVVM架构的思路。 1 LiveData ViewModel DataBinding 以上3个组件是JectPack中的热门组件,也是MVVM的核心;LiveData具备感知数据变化的能力,可以动态更新UI数据;ViewModel有从始而终的生命周期,可感知App的生命周期;DataBinding实现数

qq_33235287的博客 933

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

Android Jetpack架构组件之LiveData

有时候,靠单纯的判断并不能确定成功的几率。与其在等待中浪费青春,不如在追求中燃烧生命。——《狼道》 目录 前言 一、简介 ​二、基本使用 三、源码分析 四、内容推荐 五、项目参考 前言 ——这篇记录的是一个常用的Jetpack架构组件之一的LiveData。通俗讲它有两个显著作用:1.通过观察者模式当数据发生变化的时候通知UI更新。2.与生命周期绑定在一起,当组件生命周期...

斌林诚上的博客 1220

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

Android Jetpack架构组件——LiveData原理篇

前言 前面我们讲到了LiveData是如何使用的,并在最后留了几个问题。比如它是如何通过生命周期去变化的?为什么DESTORY不会接受数据?postValue和setValue是如何更新数据的?Transformations的map和switchMap方法内部是如何操作的?别急,本篇文章会带你了解其原理。接下来上正文。 LiveData是如何观察生命周期变化的? 如何观察生命周期,我们需要通过他的observe方法去看,我们上源码: @MainThread public void obser

一个学渣走向android之路 731

Jectpack 笔记

无

qq_23911165的博客 409

Android Jetpack(二)LiveData

LiveData是2017年 Google I/O 大会和 LifeCycle 一起推出的。他们都是 Architecture Components 的组件。LiveData是一种可观察的数据持有类。与常规的可观察类不同,LiveData 具有生命周期感知能力,意指它遵循其他应用组件( Activity、Fragment 或 Service)的生命周期。这种感知能力可确保 Li...

Fighting_初心的博客 461

Jetpack LiveData使用(二)

Jetpack LiveData使用(一)简要介绍了liveData最简单的使用方式。 下面我们看看livedata的数据格式转换map、livedata多源监听MediatorLiveData 、livedata多源切换和控制SwitchMap的使用。 一、数据转化map 由于数据的来源多样,赋值于UI需要将原始数据转换为UI对应的数据类型或者数据bean,此时可以使用map: 原始代码仍然基于,这里只需添加变化的map操作, activity的map: //map转

王温暖的博客 633

JetPack组件LiveData

虽然可以使用 LiveData 转换和 MediatorLiveData 来实现此目的,但此方法的缺点在于:用于组合数据流的功能非常有限,并且所有 LiveData 对象(包括通过转换创建的对象)都会在主线程中观察到。创建可定义 onChanged() 方法的 Observer 对象,该方法可以控制当 LiveData 对象存储的数据更改时会发生什么。当更新存储在 LiveData 对象中的值时,它会触发所有已注册的观察者(只要附加的 LifecycleOwner 处于活跃状态)。...

即将成为Android大师的小学徒 408

【Android】Jetpack-ViewModel+LiveData+DataBinding

LiveData是Android架构组件中的一部分,用于在数据源和UI之间建立连接,实现数据的实时更新和同步。它允许观察者(例如Activity或Fragment)订阅数据变化,并在数据发生变化时自动更新UI。Android DataBinding是Google在Jetpack中推出的一款数据绑定的支持库,它通过将数据源直接与UI元素进行绑定来实现数据与视图之间的自动更新。

LeGuan_Ha的博客 1405

jectpack与kotlin

CoroutineScope :协程作用域。coroutines:协程。

weixin_35837339的博客 238

Android Jetpack组件学习 ViewModel & LiveData

一、简介 ViewModel - 提供了一种创建和检索绑定到特定生命周期的对象的方法。ViewModel通常存储视图数据的状态,并与其他组件通信,例如数据存储库或处理业务逻辑层。 LifecycleOwner / LifecycleRegistryOwner -无论是LifecycleOwner和LifecycleRegistryOwner都是AppCompatActivity和Support ...

Icarus_的学习笔记 401

jetpack之LiveData

LiveData 一般的LiveData配合ViewMode使用 LiveData是一个可以被观察的数据持有者。被观察到数据变化的时候,通知相关的,存活的UI。(与生命周期相关) 优势 确保UI的显示状态与数据一致:因为是使用了观察者模式 没有内存泄漏:与生命周期相关,在UI执行了destroy的时候,观察者自动清除 不会因为活动停止而崩溃:如果观察者在后台堆栈中活动,就不会接受到LiveD...

snoto的专栏 307

2023.10.6学习jectpack入门学习篇

开始教程前添加依赖implementation "androidx.lifecycle:lifecycle-extensions:2.2.0"(使用简单不需要添加这个,因为viewmodle是官方内置支持的,不需要添加额外依赖,这里是便于后续复杂项目搭建做准备)下面教程开始:首先需要知道自己为什么使用jectpack,是因为原生开发时候activity要管理的东西太多了,处理逻辑,初始化界面,更新ui,并且横竖屏切换时候容易重调导致数据丢失,十分繁琐。

qq_41340838的博客 250
上一篇: JectPack架构学习系列一
下一篇: JectPack架构学习系列三_Databinding
zmybiealex
博客等级 码龄10年 48粉丝 46原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值