개발자이야기
android intent bundle 본문
bundle
이번엔 android bundle에 대해 알아보겠습니다.
bundle이란??
단순히 여러가지의 타입의 값들을 저장하는 묶음 이라고 생각 합시다.
그 안에서는 map을 이용하여 값들을 저장합니다.
val bundle = Bundle()
bundle.putString("key","value")
단순히 위와 같이 사용합니다. map 의 <key, value> 형식과 같으며 실제로 내부적으로는 map 을 사용하여 값을 저장합니다.
Intent
android 개발을 하다보면 필히 intent를 사용하며 값을 전달해야 하는 경우가 생깁니다.
그럴땐 우린 아래와 같이 값 전달을 합니다.
val intent = Intent(this, Activity::class.java)
intent.putExtra("data", "값 받아라!")
intent.putExtra("data2", "이값도 받아라!")
아래와 같이 bundle로 묶어 intent로 전달 할 수도 있습니다.
val bundle = Bundle()
bundle.putString("data", "값 받아라!")
bundle.putString("data2", "이값도 받아라!")
intent.putExtra("bundle", bundle)
거리낌 없이 쓰는 putExtra 내부에선 bundle 클래스를 이용하여 Map 객체에 값 저장을 합니다.
@Intent.java
public @NonNull Intent putExtra(String name, @Nullable String value) {
if (mExtras == null) {
mExtras = new Bundle();
}
mExtras.putString(name, value);
return this;
@BaseBundle.java
public void putString(@Nullable String key, @Nullable String value) {
unparcel();
mMap.put(key, value);
}
위와 같이 전달된 값을 가지고 Bundle 객체에 값을 Map으로 저장하게 되는 것 입니다.
intent를 사용하다보면 DataClass를 전달 해야 하는 상황도 심심찮게 만날 수 있습니다.
data class DataClass(
var data: String = ""
): Serializable
위와 같이 Serializable interface를 명시해 주기만 하면
@Send
val bundle = Bundle()
bundle.putSerializable("dataClass", DataClass())
val intent = Intent(this, Activity::class.java)
intent.putExtra("dataClass", DataClass())
@Receiver
val intent = getIntent()
val dataClass = intent.getSerializableExtra("dataClass") as DataClass
위와 같이 Data Class 또한 전달 하고 수신 받을 수 있습니다.
Bundle은 android 개발에 있어 꼭 필요한 요소라 생각되어 포스팅 합니다.
크게 어려운 내용은 없으며 복잡한 설명을 피하기 위해 간단히 사용법 만을 작성합니다.
읽어주셔서 감사합니다.
'android' 카테고리의 다른 글
android gpu 렌더링 (0) | 2021.07.26 |
---|---|
android RecycledViewPool (0) | 2021.07.24 |
android launchMode (0) | 2021.07.13 |
android 수명주기 (0) | 2021.07.08 |
android Dagger (0) | 2021.06.09 |