목표
- Bundle이 가진 특성을 이해한다.
- Bundle에 어떤 객체가 들어가고 나올 수 있는지 안다.
Bundle
Bundle이란 Map형태로 구현된 데이터의 묶음(Bundle)이다. Map형태라 key 값이 String이며, value값에는 Int, String과 같은 간단한 타입부터 Serializable, Parcelable 같은 복잡한 타입이 들어올 수 있다. Android에서는 객체를 전달할 때 보통 Parcelable을 구현한 객체를 전달한다.
*Parcelable에 대해 모른다면 [Bundle] Parcel과 Parcelable 글을 참조
Bundle의 사용
Android에서는 Bundle을 다음의 활동에 사용한다.
Activity의 상태 저장 및 복구(onSavedInstanceState, onRestoreInstanceState)
Bundle은 데이터 저장 객체로 상태 저장 및 복구에 사용된다. Activity가 onStop()되기 전에 onSavedInstanceState에서 저장할 데이터를 저장시키며, onStart()이후에 onRestoreInstanceState에서 복구시킨다.
override fun onRestoreInstanceState(savedInstanceState: Bundle) {
val savedProject : Project? = savedInstanceState.getParcelable("project")
super.onRestoreInstanceState(savedInstanceState)
}
코드1. Activity에서 저장된 데이터 복구시키기
Intent의 extras를 이용하여 다른 구성요소(Activity, Broadcast Receiver 등)에 데이터 전달
Intent에서는 putExtra메서드를 이용해 데이터를 입력할 수 있다.
이 때 입력되는 Extra가 바로 Bundle 객체이다. 아래 코드는 putExtra에 Parcelable을 입력하는 예시로 extra에 Parcelable을 입력할 때 Bundle객체를 생성하여 입력하는 것을 볼 수 있다.
public @NonNull Intent putExtra(String name, @Nullable Parcelable[] value) {
if (mExtras == null) {
mExtras = new Bundle();
}
mExtras.putParcelableArray(name, value);
return this;
}
코드2. putExtra를 이용한 Parcelable 입력
반응형