مقالات

آموزش LiveData: مدیریت داده‌های واکنش‌پذیر در معماری MVVM اندروید

LiveData در معماری MVVM اندروید، یک ابزار قدرتمند برای مدیریت و انتقال داده‌های زنده(نمایش تغییرات real time) است. با استفاده از LiveData، می‌توانیم داده‌ها را به صورت مشاهده‌پذیر برای کامپوننت‌های مختلف در برنامه ارائه دهیم. این کلاس، تغییرات را به صورت خودکار ردیابی کرده و آنها را به مشترکین خود منتقل می‌کند. این ویژگی مشترکین را قادر می‌سازد تا به روزرسانی‌های داده‌ها را دریافت کنند و براساس آنها واکنش مناسبی نشان دهند.

 

“ما را در اینستاگرام دنبال کنید”

در این مقاله از سری مقالات برنامه نویسی اندروید اومدیم در مورد LiveData در اندروید ، صحبت کنیم. پس با سایت ترولرن همراه باش.

“قبل از شروع مقاله، بگم که بعد از مطالعه این مطلب، از آموزش پروژه محور برنامه نویسی اندروید سایتمون یعنی دوره ژنرال اندروید غافل نشید.”

توی این دوره در یک فصل کامل، هم معماری های اندروید مثل mvc, mvp و mvvm رو به طور کامل و با مثال شرح دادیم و هم از لایو دیتا و state flow که جایگزینی برای لایودیتا هستش استفاده کردیم و کامل اونها رو آموزش دادیم.

LiveData چیست؟

LiveData در اندروید یک کلاس است که در فریمورک پیشنهادی معماری MVVM (Model-View-ViewModel) استفاده می‌شود. Live Data به صورت اصلی برای مدیریت و انتقال داده‌های زنده (Observable Data) در برنامه‌های اندروید طراحی شده است. این کلاس از اصول “مشاهده” (Observability) پیروی می‌کند و در ارتباط با کلاس‌های دیگری مانند ViewModel و View استفاده می‌شود.

LiveData یک کلاس در بایندینگ داده (Data Binding) و معماری معرفی شده است که قابلیت مشاهده و مشترک کردن تغییرات در داده‌ها را فراهم می‌کند. با استفاده از LiveData، می‌توانید تغییرات را به طور خودکار رصد کنید و به اجزای دیگر از برنامه نیز منتقل کنید. این کلاس برای ارائه داده‌ها به طور مشترک بین کلاس‌ها و کامپوننت‌های مختلف مانند فعالیت‌ها (Activities)، فرگمنت‌ها (Fragments) و سرویس‌ها (Services) استفاده می‌شود.

مزایای استفاده از LiveData در اندروید

  • ساده‌تربودن کد

LiveData به شما اجازه می‌دهد تا تغییرات در داده‌ها را به صورت زنده دنبال کنید و بر اساس آن‌ها واکنش نشان دهید. با استفاده از LiveData، شما نیازی به نوشتن کدهای پیچیده برای به‌روزرسانی داده‌ها و رابط کاربری ندارید. به علاوه، LiveData از مفهوم “مشاهده” (Observability) پیروی می‌کند که منجر به کاهش خطاها و اشکالات در برنامه می‌شود و کد شما را ساده‌تر و قابل نگهداری‌تر می‌کند.

  •  تطبیق با چرخه عمر کامپوننت‌ها

LiveData به طور خودکار چرخه عمر کامپوننت‌ها را دنبال می‌کند. این به این معنی است که LiveData تا زمانی که چرخه عمر کامپوننتی که در آن هستیم فعال باشد، فعال است و عمل میکند. این ویژگی موجب جلوگیری از خطاهای مرتبط با حافظه در برنامه می‌شود و از عملکرد بهتری برخوردار است.

  •  انطباق با رشته‌های اصلی (Main Thread)

LiveData از مکانیزم‌های داخلی برنامه استفاده می‌کند تا تغییرات را در رشته‌ای اصلی (Main Thread) اعمال کند. این به این معنی است که می‌توانید به راحتی تغییرات را در رابط کاربری بروز کنید بدون اینکه نگران مشکلاتی مانند تداخل رشته (Thread) باشید. این بهبود عملکرد برنامه را تضمین می‌کند و به شما امکان استفاده آسانتر و امن‌تر از LiveData را می‌دهد.

  •  پشتیبانی از پیش‌بینی مشترک

LiveData قابلیت پشتیبانی از پیش‌بینی مشترک را دارد. این به این معنی است که چندین مشترک می‌توانند به یک LiveData متصل شوند و تغییرات را دریافت کنند. به عنوان مثال، اگر چندین کامپوننت در صفحه یا صفحات مختلف به یک مجموعه داده مرتبط شوند، همه آنها به طور همزمان تغییرات را دریافت خواهند کرد و رابط کاربری را به روز خواهند کرد. این ویزی باعث ایجاد هماهنگی بین اجزا مختلف برنامه می‌شود و امکان انتقال داده‌ها بین آنها را فراهم می‌کند.

  •  اطمینان از تناسب با معماری MVVM

لایو دیتا بخشی اساسی از معماری MVVM در اندروید است. با استفاده از LiveData، می‌توانید مدل‌ها و داده‌ها را از واسطه‌ها جدا کنید و به صورت مشترک بین مشاهده‌کننده‌ها و مدل‌ها به اشتراک بگذارید. این باعث افزایش قابلیت نگهداری، قابلیت اطمینان و قابلیت تست برنامه می‌شود.

  •  پشتیبانی از تغییرات داده‌های غیرمتناهی

LiveData به صورت پویا با تغییرات داده سازگار است، به این معنی که می‌توانید تغییرات غیرمتناهی را در داده‌ها ردیابی کنید. با استفاده از توابع مانیتورینگ مرتبط با LiveData می‌توانید تغییرات را به صورت دقیق دنبال کنید و به محض رخداد تغییر، واکنش مناسب را نشان دهید.

به طور کلی، LiveData در اندروید ابزاری قدرتمند برای مدیریت و انتقال داده‌های زنده در برنامه‌ها است. با استفاده از LiveData، می‌توانید کد خود را ساده‌تر، خواناتر و قابل نگهداری‌تر کنید و از مزایای معماری MVVM بهره‌برداری کنید.

یک مثال برای نمایش ویژگی های LiveData در معماری mvvm اندروید با کاتلین

به عنوان یک مثال جامع و کامل برای نمایش ویژگی‌های LiveData در معماری MVVM در اندروید با استفاده از Kotlin، به شما یک پروژه ساده راهنما خواهم داد. در این مثال، فرض می‌کنیم که شما یک برنامه‌ی ساده با یک فهرست اسامی دارید و می‌خواهید آن را با استفاده از LiveData و MVVM نمایش دهید. برای این منظور، مراحل زیر را دنبال کنید:

ابتدا، کلاس ViewModel را ایجاد کنید. در این کلاس، یک LiveData از نوع List<String> را تعریف کنید. این لایو دیتا برای نگهداری فهرست اسامی استفاده می‌شود. در این کلاس، یک تابع به نام loadNames نیز ایجاد کنید که فهرست اسامی را بارگیری کرده و آن را به لایو دیتا اختصاص می‌دهد.

import androidx.lifecycle.LiveData
import androidx.lifecycle.MutableLiveData
import androidx.lifecycle.ViewModel

class NameViewModel : ViewModel() {
    private val _namesList = MutableLiveData<List<String>>()
    val namesList: LiveData<List<String>> get() = _namesList

    fun loadNames() {
        // بارگیری فهرست اسامی
        val names = listOf("John", "Emily", "David", "Sarah")
        _namesList.value = names
    }
}

حالا، در کلاس فعالیت (Activity) خود، یک شیء از ViewModel را ایجاد کنید و LiveData را مشترک کنید. در این مثال، از کلاس AppCompatActivity استفاده خواهیم کرد.

import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import androidx.lifecycle.Observer
import androidx.lifecycle.ViewModelProvider

class MainActivity : AppCompatActivity() {
    private lateinit var viewModel: NameViewModel

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        // ایجاد شیء از ViewModel
        viewModel = ViewModelProvider(this).get(NameViewModel::class.java)

        // مشترک کردن LiveData با Observer
        viewModel.namesList.observe(this, Observer { names ->
            // به روزرسانی ویژگی‌های UI با فهرست اسامی جدید
            updateUI(names)
        })

        // بارگیری فهرست اسامی
        viewModel.loadNames()
    }

    private fun updateUI(names: List<String>) {
        // به روزرسانی ویژگی‌های UI مانند فهرست اسامی
    }
}

در این مثال، وقتی که loadNames در ViewModel فراخوانی می‌شود، فهرست اسامی بارگیری می‌شود و سپس به لایو دیتا اختصاص داده می‌شود. Observer در Activity متصل شده است و هر وقت که فهرست اسامی تغییر می‌کند، وظیفه به روزرسانی ویژگی‌های UI را بر عهده دارد.

این مثال نشان می‌دهد چگونه از لایو دیتا و MVVM در اندروید استفاده کنید تا به روزرسانی داده‌ها و هماهنگی بین کامپوننت‌ها را بهبود بخشید.

 

 

یک مثال برای نمایش ویژگی های LiveData در معماری mvvm اندروید با جاوا

به عنوان یک مثال مشابه با استفاده از Java، به شما یک قطعه کد جامع برای نمایش ویژگی‌های LiveData در معماری MVVM در اندروید خواهم داد. در این مثال، فرض می‌کنیم که شما یک برنامه ساده با یک فهرست اسامی دارید و می‌خواهید آن را با استفاده از LiveData و MVVM نمایش دهید. برای این منظور، مراحل زیر را دنبال کنید:

ابتدا، کلاس ViewModel را ایجاد کنید. در این کلاس، یک LiveData از نوع List<String> را تعریف کنید. این لایو دیتا برای نگهداری فهرست اسامی استفاده می‌شود. در این کلاس، یک متد به نام loadNames نیز ایجاد کنید که فهرست اسامی را بارگیری کرده و آن را به LiveData اختصاص می‌دهد.

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

import java.util.Arrays;
import java.util.List;

public class NameViewModel extends ViewModel {
    private MutableLiveData<List<String>> namesList = new MutableLiveData<>();

    public LiveData<List<String>> getNamesList() {
        return namesList;
    }

    public void loadNames() {
        // بارگیری فهرست اسامی
        List<String> names = Arrays.asList("John", "Emily", "David", "Sarah");
        namesList.setValue(names);
    }
}

حالا، در کلاس فعالیت (Activity) خود، یک شیء از ViewModel را ایجاد کنید و لایو دیتا را مشترک کنید. در این مثال، از کلاس AppCompatActivity استفاده خواهیم کرد.

import androidx.appcompat.app.AppCompatActivity;
import androidx.lifecycle.Observer;
import androidx.lifecycle.ViewModelProvider;

import android.os.Bundle;
import android.widget.TextView;

import java.util.List;

public class MainActivity extends AppCompatActivity {
    private NameViewModel viewModel;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        // ایجاد شیء از ViewModel
        viewModel = new ViewModelProvider(this).get(NameViewModel.class);

        // مشترک کردن LiveData با Observer
        viewModel.getNamesList().observe(this, new Observer<List<String>>() {
            @Override
            public void onChanged(List<String> names) {
                // به روزرسانی ویژگی‌های UI براساس فهرست اسامی جدید
                updateUI(names);
            }
        });

        // بارگیری فهرست اسامی
        viewModel.loadNames();
    }

    private void updateUI(List<String> names) {
        // به روزرسانی ویژگی‌های UI مانند فهرست اسامی
        TextView namesTextView = findViewById(R.id.namesTextView);
        namesTextView.setText(names.toString());
    }
}

در این مثال، وقتی loadNames در ViewModel فراخوانی می‌شود، فهرست اسامی بارگیری می‌شود و به لایو دیتا اختصاص داده می‌شود. Observer در Activity مشترک شده است و هر وقت فهرست اسامی تغییر کند، وظیفه به روزرسانی ویژگی‌های UI را بر عهده دارد.

این مثال نشان می‌دهد چگونه از لایو دیتا و MVVM در اندروید با استفاده از جاوا استفاده کنید تا به روزرسانی داده‌ها و هماهنگ‌سازی بین کامپوننت‌ها را بهبود بخشید.

حرف آخر

با استفاده از LiveData در معماری MVVM اندروید، می‌توانیم بهبود قابل توجهی در مدیریت داده‌های زنده و هماهنگی بین کامپوننت‌ها ببینیم. لایو دیتا با ارائه قابلیت مشاهده خودکار و پشتیبانی از چرخه عمر کامپوننت‌ها، تضمین می‌کند که داده‌ها همواره هماهنگ باشند و تغییرات به درستی در رابط کاربری اعمال شوند. همچنین، قابلیت پشتیبانی از رشته اصلی و پیش‌بینی مشترکان، امکان انتقال داده‌ها و ایجاد هماهنگی بین اجزا را فراهم می‌کند. با استفاده از LiveData، توسعه‌دهندگان می‌توانند برنامه‌هایی با عملکرد بهتر، قابلیت پاسخگویی بیشتر و کدی ساده‌تر ایجاد کنند.

و همچنین ممنون میشم از طریق ستاره‌های این پایین به این مقاله امتیاز بدی و اگه هر سوالی داشتی توی قسمت دیدگاه بپرس و قطعا بهت پاسخ میدیم.

‫5/5 ‫(3 نظر)
عاطفه امیری

Recent Posts

چگونه دوره آموزشی کاتلین پیشرفته می‌تواند مهارت‌های شما را ارتقاء دهد؟

دوره آموزشی کاتلین پیشرفته می‌تواند مهارت‌های شما را با بهره‌گیری از ابزارها و فناوری‌های مدرن…

4 ماه ago

مزیت‌های کاتلین نسبت به سایر زبان‌های برنامه نویسی اندروید

مزیت‌های کاتلین نسبت به سایر زبان‌های برنامه نویسی اندروید این است که سایر زبان‌ها، از…

5 ماه ago

بهینه‌سازی عملکرد اپلیکیشن‌های اندروید: راهنمای جامع و کاربردی

بهینه‌سازی عملکرد اپلیکیشن‌های اندروید یکی از مهم‌ترین فاکتورهایی است که برای کاربران در دنیای امروز…

10 ماه ago

سوالات مصاحبه‌ی استخدامی کاتلین همراه با جواب(قسمت چهارم)

مصاحبه‌ی استخدامی کاتلین یک فرصت برای ارزیابی مهارت‌ها و توانایی‌های یک برنامه‌نویس در توسعه اپلیکیشن‌های…

11 ماه ago

سوالات مصاحبه استخدام زبان کاتلین همراه با جواب(قسمت سوم)

مصاحبه استخدام زبان کاتلین یک فرصت برای ارزیابی مهارت‌ها و توانایی‌های یک برنامه‌نویس در توسعه…

11 ماه ago

سوالات مصاحبه استخدام کاتلین همراه با جواب(قسمت دوم)

مصاحبه استخدام کاتلین یک فرصت برای ارزیابی مهارت‌ها و توانایی‌های یک برنامه‌نویس در توسعه اپلیکیشن‌های…

11 ماه ago