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

软件下载网站哪个好环保工程 技术支持 东莞网站建设

软件下载网站哪个好,环保工程 技术支持 东莞网站建设,如何做好外贸网站建设,如何用frontpage做网站1.ViewModel 解决问题: 瞬态数据丢失异步调用内存泄漏类膨胀提高维护难度和测试难度 作用: 介于View视图和Model数据模型之间桥梁使视图和数据能够分离,也能保持通信 public class MainActivity extends AppCompatActivity {private Tex…

1.ViewModel

解决问题:

  • 瞬态数据丢失
  • 异步调用内存泄漏
  • 类膨胀提高维护难度和测试难度

作用:

  • 介于View视图和Model数据模型之间桥梁
  • 使视图和数据能够分离,也能保持通信
public class MainActivity extends AppCompatActivity {private TextView textView;private  MyViewModel viewModel;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);textView = findViewById(R.id.textView);viewModel = new ViewModelProvider(this, new ViewModelProvider.AndroidViewModelFactory()).get(MyViewModel.class);textView.setText(String.valueOf(viewModel.number));}public void plusNumber(View view) {textView.setText(String.valueOf(++viewModel.number));}
}
public class MyViewModel extends ViewModel {public int number;}

2.LiveData

LiveData是Android架构组件中的一部分,用于在数据源和UI之间建立连接,实现数据的实时更新和同步。它允许观察者(例如Activity或Fragment)订阅数据变化,并在数据发生变化时自动更新UI。

  • 基本概念:LiveData是一个可观察的数据持有者类,它遵循观察者模式。这意味着它可以持有数据,并且当数据发生变化时,它会通知所有已订阅的观察者。这在处理生命周期相关的数据时非常有用,因为它可以确保只有当活动或片段处于激活状态时,才会接收到更新。
  • 工作原理:LiveData的核心是LifecycleOwner,通常是Activity或Fragment。当LiveData对象有新数据时,它会检查是否有活跃的观察者,并通知它们。如果观察者已经销毁,如Activity已经停止或Fragment已经分离,那么LiveData就不会再发送通知,从而避免了内存泄漏。
  • 使用步骤:要使用LiveData,首先需要在项目的build.gradle文件中添加依赖。然后,可以在ViewModel中创建LiveData对象,并在UI层(如Activity或Fragment)中观察它。当LiveData对象的数据改变时,UI会自动更新。
  • 应用场景:LiveData适用于多种场景,包括但不限于配置更改、网络状态变化、数据库操作等。它特别适用于需要响应配置更改(如屏幕旋转)的场景,因为在这些情况下,观察者可能会被销毁并重新创建,而LiveData能够确保在这些过程中不会发生内存泄漏。
  • 双向绑定:虽然LiveData本身不直接支持双向绑定,但可以与DataBinding库结合使用,通过将LiveData对象与UI元素绑定来实现双向绑定的效果。
  • 数据更新:当LiveData中的数据发生变化时,所有订阅了该LiveData的观察者都会收到通知,从而实现UI的自动更新。
  • 事件处理:LiveData还提供了Transformations API,允许开发者对LiveData对象进行转换和组合,以实现更复杂的数据处理逻辑。
  • 高级功能:除了基本的数据持有和通知功能外,LiveData还提供了一些高级功能,如切换地图类型、设置筛选条件等,这些功能使得LiveData更加灵活和强大。
public class MyViewModel extends ViewModel {private MutableLiveData<Integer> currentSecond;public MutableLiveData<Integer> getCurrentSecond(){if (currentSecond == null){currentSecond = new MutableLiveData<>();currentSecond.setValue(0);}return currentSecond;}
}
public class MainActivity extends AppCompatActivity {private TextView textView;private MyViewModel viewModel;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);textView = findViewById(R.id.textView);viewModel = new ViewModelProvider(this, new ViewModelProvider.AndroidViewModelFactory()).get(MyViewModel.class);textView.setText(String.valueOf(viewModel.getCurrentSecond()));viewModel.getCurrentSecond().observe(this, new Observer<Integer>() {@Overridepublic void onChanged(Integer integer) {textView.setText(String.valueOf(integer));}});startTimer();}private void startTimer(){new Timer().schedule(new TimerTask() {@Overridepublic void run() {// 非ui线程 postValue// ui线程 setValueviewModel.getCurrentSecond().postValue(viewModel.getCurrentSecond().getValue()+1);}},1000,1000);}
}

3.DataBinding

Android DataBinding是Google在Jetpack中推出的一款数据绑定的支持库,它通过将数据源直接与UI元素进行绑定来实现数据与视图之间的自动更新。
对DataBinding的详细介绍:

  • 基本概念:DataBinding是一种强大的数据绑定技术,它能够实现视图和数据之间的自动更新。开发者可以将数据直接绑定到视图上,从而简化了视图和数据之间的操作,提高了代码的可读性和可维护性。
  • 工作原理:DataBinding的工作原理主要依赖于数据绑定引擎和数据对象。数据绑定引擎负责管理数据和视图之间的关系,当数据发生变化时,引擎会自动更新视图。而数据对象则是数据的载体,它可以是任何对象,只要实现了相应的数据接口。
  • 使用步骤:启用DataBinding需要在app module的build.gradle中添加相应代码。布局文件需要更改为layout节点并引入data节点,同时创建好需要用到的Model。在Activity或Fragment中,用DataBindingUtil.setContentView(Activity activity, int layoutId)代替setContentView(int layoutId),同时初始化数据,并进行绑定。
  • 应用场景:列表展示、条件渲染、数据绑定布局、MVVM架构等都是DataBinding的应用场景。DataBinding与MVVM架构相结合,可以实现更好的代码分离和组件化开发。
  • 双向绑定:双向绑定的效果是数据影响界面,界面变化也要使得数据发生变化。例如EditText输入内容时,绑定的数据bean要跟着变化。
  • 数据更新:Databinding通过使用实现Observable的数据,当数据更新的时候,自动更新UI。监听对象变化更新。
  • 事件处理:事件处理包括方法引用和监听绑定两种方式。
  • 高级功能:DataBinding支持在普通方法上添加@注解来添加自定义控件属性。这提供了更大的灵活性,允许开发者根据需要定制控件的行为
public class MainActivity extends AppCompatActivity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);ActivityMainBinding binding = DataBindingUtil.setContentView(this, R.layout.activity_main);Idol idol = new Idol("蔡徐坤", "五星");binding.setIdol(idol);}
}
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-auto"xmlns:tools="http://schemas.android.com/tools"><data><variablename="idol"type="com.zzzjian.databinding.Idol" /></data><androidx.constraintlayout.widget.ConstraintLayoutandroid:id="@+id/main"android:layout_width="match_parent"android:layout_height="match_parent"tools:context=".MainActivity"><androidx.constraintlayout.widget.Guidelineandroid:id="@+id/guideline"android:layout_width="wrap_content"android:layout_height="wrap_content"android:orientation="horizontal"app:layout_constraintGuide_begin="365dp" /><ImageViewandroid:id="@+id/imageView2"android:layout_width="300dip"android:layout_height="300dip"android:contentDescription="TODO"app:layout_constraintBottom_toTopOf="@+id/guideline"app:layout_constraintEnd_toEndOf="parent"app:layout_constraintStart_toStartOf="parent"android:src="@drawable/ikun"app:layout_constraintTop_toTopOf="parent"tools:src="@tools:sample/avatars" /><TextViewandroid:id="@+id/textView"android:layout_width="wrap_content"android:layout_height="wrap_content"tools:text="姓名"android:text="@{idol.name}"android:textSize="24sp"app:layout_constraintBottom_toBottomOf="parent"app:layout_constraintEnd_toEndOf="parent"app:layout_constraintStart_toStartOf="parent"app:layout_constraintTop_toTopOf="@+id/guideline"app:layout_constraintVertical_bias="0.245" /><TextViewandroid:id="@+id/textView2"android:layout_width="wrap_content"android:layout_height="wrap_content"tools:text="五星"android:text="@{idol.star}"android:textSize="24sp"app:layout_constraintBottom_toBottomOf="parent"app:layout_constraintEnd_toEndOf="parent"app:layout_constraintStart_toStartOf="parent"app:layout_constraintTop_toTopOf="@+id/guideline" /></androidx.constraintlayout.widget.ConstraintLayout>
</layout>
http://www.yayakq.cn/news/150178/

相关文章:

  • 网站域名注册后怎么建设投诉网站制作
  • 旅游网站建设步骤国内服务器租用
  • 怎么建设销售网站个人网站备案与企业备案
  • 电商网站开发流程代码检测WordPress网站的安全性
  • 网站平台管理优化方案设计辽宁建设工程信息网内容
  • 网页设计如何建立网站网址导航怎么删除
  • 龙泉建设局网站广告设计与制作需要学什么专业
  • 鸿邑网站建设做网站不会写代码
  • 面包机做面包网站莱芜吧 莱芜贴吧
  • 上海企业做网站q版网页游戏大全
  • 青海省网站建设公司网站建设公司怎么发展新客户
  • 商业网站的后缀一般为惠阳做网站
  • 做seo网站标题重要吗住房和城市建设厅网站
  • 建专业外贸网站一分钟建设网站
  • dw中用php做网站深圳网站制作收费
  • 东莞市网站建设服务机构wordpress搬瓦工
  • 做网站市场报价步登顶wordpress注册不
  • 网站开发精灵科技霸权
  • 做网站直播平台建设部评职称查询网站
  • 专业上海网站建设公司哪家好photoshop网站模板下载
  • 南宁手机建站模板莲花直播
  • 北京上海网站建设公司国家工商网查询官网
  • o2o电子商务网站北京三屏网站制作
  • 网站如何进行推广网站空间已到期 请尽快续费开通
  • 用muse做网站wordpress 文章模板
  • 网站主页用ps做淘宝怎么设置关键词搜索
  • 关于wordpress自动更新seo计费怎么刷关键词的
  • 大学生做家教比较好的网站建设海外网站
  • 微信公众平台一定要找网站做吗wordpress 1 s
  • 网站建设佰金手指科杰二九国内惯性导航