Android JitPack 之 LiveData 和 ViewModel

简介: Android JitPack 之 LiveData 和 ViewModel

LiveData :是一种持有可被观察的类,和其他可被观察的类不同的是,LiveData 是就要生命周期感知能力的,这意味着他可以在 Activity ,fragment 或者 service 生命周期活跃状态时 更新这些组件。


ViewModel:它是以一种关注生命周期的方式存储和管理与 UI 相关的数据。当 屏幕旋转时,活动会重新创建,onCreate方法被重新调用,但是我们可以使用 Bundle 恢复数据,但是这种方法只适用于进行序列化的少量数据,不适合大量数据, 使用ViewModel 会自动保留 之前的数据并给行的 Activity 或者 Fragment 使用。知道 Activity 销毁时 ,Framework 会调用 ViewModel 的 onCleared 方法,我们可以在 onCleared 方法中 做一些 资源清理工作


使用方式


1,导入依赖


implementation "android.arch.lifecycle:viewmodel:1.1.1" 
 implementation "android.arch.lifecycle:livedata:1.1.1"


2,这里我们以一种最简单的方式来演示它,新建 UserViewModel 类 继承自 ViewModel。


public class UserViewModel extends ViewModel {
   MutableLiveData<String> mutableLiveData;
   public MutableLiveData<String> getStr(){
       if (mutableLiveData == null){
           mutableLiveData = new MutableLiveData<>();
       }
       new Thread(new Runnable() {
           @Override
           public void run() {
               for (int i = 0; i < 3; i++) {
                   try {
                       Thread.sleep(2000);
                   } catch (InterruptedException e) {
                       e.printStackTrace();
                   }
                   mutableLiveData.postValue("哈哈");
               }
           }
       }).start();
       return mutableLiveData;
   }
}


我们使用 MutableLiveData 来保存数据,泛型为数据的类型,在 getStr 方法中,创建了一个线程,然后 通过 MutableLiveData 将数据发送出去,子线程使用postValue,主线程使用 setValue,最后将 MutableLiveData 返回即可。


3,接下来在 Activity 中使用即可


public class MainActivity extends AppCompatActivity {
    private UserViewModel model;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        model = new ViewModelProvider.NewInstanceFactory().create(UserViewModel.class);
        model.getStr().observe(this, new Observer<String>() {
            @Override
            public void onChanged(String s) {
                Log.e("哈哈哈", "onChanged: ");
            }
        });
    }
}


通过上面的方式 即可 拿到数据,


4,如果需要多次获取数据呢,例如界面需要刷新等…


如下所示:


findViewById(R.id.btn).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                if (model != null) {
                    model.getStr();
                }
            }
        });


如果点击了按钮,则就会重新获取一次数据,对应的监听也会继续执行一次。


相关文章
|
4月前
|
存储 移动开发 数据库
构建高效Android应用:探究LiveData和ViewModel的最佳实践
【4月更文挑战第20天】 在动态演化的移动开发领域,构建一个既响应迅速又能够在用户界面保持稳定的Android应用是至关重要的。近年来,随着Android架构组件的推出,特别是LiveData和ViewModel的引入,开发者得以更有效地管理应用状态并优化用户界面的响应性。本文将深入探讨LiveData和ViewModel的实现机制,并通过案例分析展示如何结合它们来构建一个高效且健壮的Android应用架构。我们将重点讨论如何通过这些组件简化数据绑定过程、提高代码的可维护性和测试性,同时确保用户界面的流畅性。
|
4月前
|
缓存 API Android开发
安卓现代化开发系列——传世不朽ViewModel
安卓现代化开发系列——传世不朽ViewModel
171 0
|
2月前
|
存储 前端开发 测试技术
Android Kotlin中使用 LiveData、ViewModel快速实现MVVM模式
使用Kotlin实现MVVM模式是Android开发的现代实践。该模式分离UI和业务逻辑,借助LiveData、ViewModel和DataBinding增强代码可维护性。步骤包括创建Model层处理数据,ViewModel层作为数据桥梁,以及View层展示UI。添加相关依赖后,Model类存储数据,ViewModel类通过LiveData管理变化,而View层使用DataBinding实时更新UI。这种架构提升代码可测试性和模块化。
137 2
|
4月前
|
数据库 Android开发 开发者
实现高效安卓应用:探究LiveData和ViewModel的最佳实践
【4月更文挑战第19天】 在构建响应式的Android应用程序时,LiveData和ViewModel是两个核心组件。它们不仅提供了数据持有和界面更新的机制,还促进了组件间的解耦。本文将深入探讨如何通过结合LiveData和ViewModel来优化应用架构,提升用户体验,并确保数据的一致性和生存期管理。我们将透过实际案例分析,揭示这些技术如何协同工作以应对复杂的UI场景,并展示如何在实际项目中实施这些最佳实践。
|
4月前
|
移动开发 前端开发 数据管理
构建高效Android应用:采用MVVM架构与LiveData的全面指南
在移动开发领域,构建一个既快速又可靠的应用对于开发者来说至关重要。随着Android Jetpack组件的推出,MVVM(Model-View-ViewModel)架构和LiveData已成为实现响应式、可测试且易于维护应用的首选解决方案。本文将深入探讨如何在Android应用中实施MVVM模式,以及如何利用LiveData来优化UI组件的数据更新流程,确保用户界面与业务逻辑之间的高度解耦和流畅交互。
98 4
|
4月前
|
存储 移动开发 数据处理
构建高效安卓应用:探究LiveData和ViewModel的实践之路
【4月更文挑战第12天】 在动态演化的移动开发世界中,Android平台的UI架构经历了多次革新。近年来,随着Jetpack组件的推广,LiveData和ViewModel成为了开发者们提升应用响应性和稳定性的有力工具。本文将深入探讨这两项技术的核心原理、实现细节及其在实际项目中的协同运用,旨在为读者提供一份清晰、实操性强的技术指南,帮助开发者构建出既符合现代用户体验又具备高效数据管理的Android应用。
26 0
|
4月前
|
设计模式 移动开发 安全
构建高效Android应用:探究LiveData的优势与实践
【4月更文挑战第7天】随着移动开发技术的不断演进,Android开发者面临着构建更加高效、响应式和可维护应用的挑战。在众多解决方案中,LiveData作为一种观察者模式的实现,已经成为Google推荐的数据持有架构组件。本文将深入探讨LiveData的核心优势,通过具体实例展现其在Android应用中的实现方式,并分析其如何简化UI组件与数据源之间的通信,提升应用的健壮性和可测试性。
|
12月前
|
算法 Java Android开发
Android rxjava和LiveData中的内存泄漏
Android rxjava和LiveData中的内存泄漏
183 0
|
4月前
|
Android开发 Kotlin
android开发,使用kotlin学习LiveData
android开发,使用kotlin学习LiveData
95 1
|
4月前
|
Android开发 Kotlin
android开发,使用kotlin学习ViewModel
android开发,使用kotlin学习ViewModel
110 0