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의 콜백이 호출되는 것을 확인할 수 있습니다
'안드로이드 자바' 카테고리의 다른 글
[Java][Android] Dialog 외부 터치 시 닫히지 않게 하기 (0) | 2025.04.29 |
---|---|
[Java][Android] FLAG_SECURE 플래그로 스크린샷/화면 녹화 방지 (0) | 2025.04.27 |
[Java][Android] Lottie 라이브러리 활용해 애니메이션 기능 구현하기 (2) | 2025.04.22 |
[Java][Android] 안드로이드 Java로 유튜브 검색 구현하기 (0) | 2025.04.21 |
[Java][Android] SpannableString 와 ImageSpan으로 TextView에 아이콘 넣기 (0) | 2025.04.20 |