Parcelable은 안드로이드에서 객체를 직렬화하는데 사용되는 인터페이스라고 이해하면 될 것 같다. 여기서 Java의 Serialization과 다른점은 Parcelable은 Reflection 구현 대신 직렬화에 대한 처리를 명시적으로 한다.
마셜링은 프로세스간 또는 스레드 간 데이터 전송에 필요한 원격 프로시저 호출(remote procedure call, RPC) 매커니즘의 구현에 사용된다.
Parcelable은 아래의 경우에 사용된다.
1. IPC 통신
2. Intent로 컴포넌트간 데이터 전달
먼저 IPC 통신은 프로세스간의 데이터 전송을 의미하며, AIDL을 활용 시 원시타입이 아닌 참조타입을 전달할 경우 Parcelable 객체로 전달해야 한다.
구현은 Parcelable 인터페이스를 구현하여 선언한 클래스를 생성하면 된다.
예제 코드는 아래와 같다.
import android.os.Parcel
import android.os.Parcelable
class Rect() : Parcelable {
var left: Int = 0
var top: Int = 0
var right: Int = 0
var bottom: Int = 0
companion object CREATOR : Parcelable.Creator<Rect> {
override fun createFromParcel(parcel: Parcel): Rect {
return Rect(parcel)
}
override fun newArray(size: Int): Array<Rect> {
return Array(size) { Rect() }
}
}
private constructor(inParcel: Parcel) : this() {
readFromParcel(inParcel)
}
override fun writeToParcel(outParcel: Parcel, flags: Int) {
outParcel.writeInt(left)
outParcel.writeInt(top)
outParcel.writeInt(right)
outParcel.writeInt(bottom)
}
private fun readFromParcel(inParcel: Parcel) {
left = inParcel.readInt()
top = inParcel.readInt()
right = inParcel.readInt()
bottom = inParcel.readInt()
}
override fun describeContents(): Int {
return 0
}
}
참고링크:
https://developer.android.com/reference/android/os/Parcelable
https://developer.android.com/reference/android/os/Parcel
'안드로이드' 카테고리의 다른 글
Android - Bottom Dialog (BottomSheetDialogFragment) (0) | 2020.05.23 |
---|---|
Android - Handler 정리 (0) | 2020.04.29 |
Android - Xml 파싱(XmlPullParser) (0) | 2020.04.06 |
Android - 화면 당겨서 새로고치는 방법(SwipeRefreshLayout 사용 방법) (0) | 2020.04.03 |
Android Data Binding을 활용한 ViewPager와 TabLayout 연결 (0) | 2020.03.24 |