본문 바로가기
안드로이드 자바

[Java][Android] livedata 활용 예시 만들기

by teamnova 2025. 4. 25.
728x90

오늘은 livedata를 활용해 액티비티가 활성화 상태일때만 livedata의 콜백이 호출되는지 확인하는 예시를 만들어 보겠습니다.

 

 

 

레이아웃 xml 파일 코드(activity_main.xml)

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:gravity="center"
    android:padding="16dp">

    <TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="로그캣 창에서 'LiveData' 태그로 필터링하여 결과를 확인하세요."
        android:textSize="16sp"
        android:gravity="center"
        android:layout_marginTop="16dp"/>

</LinearLayout>



 

액티비티 자바 코드

public class MainActivity extends AppCompatActivity {

    private static final String TAG = "LiveData"; //로그 필터링을 위한 값

    // 정수형 값을 관찰할 수 있는 LiveData 객체
    private MutableLiveData<Integer> counterLiveData = new MutableLiveData<>();

    private Handler handler = new Handler(Looper.getMainLooper());
    private int counter = 0; // livedata의 생명주기 인식 확인용 카운터 값

    // 주기적(1초 마다)으로 카운터 값을 증가시키고 livedata에 알려주는 Runnable 객체
    private final Runnable updateRunnable = new Runnable() {
        @Override
        public void run() {
            counter++;
            // LiveData 값 업데이트
            counterLiveData.setValue(counter);

            // 로그에 카운터 값 기록
            Log.d(TAG, "LiveData 값 변경됨: " + counter);

            // 1초마다 반복 실행
            handler.postDelayed(this, 1000);
        }
    };

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

        // LiveData 초기값 설정
        counterLiveData.setValue(counter);

        // livedata가 생명주기 상태 관찰할 액티비티 등록 및 액티비티가 활성 상태 이고 카운터 값 변경된 상태일 시 호출될 콜백 정의
        counterLiveData.observe(this, value -> {
            // 옵저버 호출 시점에 로그에 기록
            Log.d(TAG, "옵저버 호출됨: " + value);
        });

        // 1초 주기 카운터 값 업데이트 시작
        startUpdates();

        Log.d(TAG, "onCreate() 호출됨");
    }

    @Override
    protected void onStart() {
        super.onStart();
        Log.d(TAG, "onStart() 호출됨 - 액티비티 STARTED");
    }

    @Override
    protected void onResume() {
        super.onResume();
        Log.d(TAG, "onResume() 호출됨 - 액티비티 RESUMED");
    }

    @Override
    protected void onPause() {
        super.onPause();
        Log.d(TAG, "onPause() 호출됨 - 액티비티 PAUSED");
    }

    @Override
    protected void onStop() {
        super.onStop();
        Log.d(TAG, "onStop() 호출됨 - 액티비티 STOPPED");
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        // 업데이트 중지
        handler.removeCallbacks(updateRunnable);
        Log.d(TAG, "onDestroy() 호출됨 - 액티비티 DESTROYED");
    }

    // 1초 주기 카운터 값 업데이트 메서드
    private void startUpdates() {
        handler.post(updateRunnable);
    }
}

 

 

 

 

실행 결과

 

액티비티가 활성화 상태일때만 livedata의 콜백이 호출되는 것을 확인할 수 있습니다