describeContents ()가 언제 어디서 사용됩니까?


93

Parcelable 메서드가 언제 어디서 호출 되는지 아는 사람이 있습니까?

@Override
public int describeContents() {
    return 0;
}

재정의해야합니다. 하지만 유용한 작업을 고려해야합니까?


아무도 생각이없는 것 같다 ..? :-/
cody

답변:


181

비트 마스크 반환 값을 생성 하는 데 사용되는 Parcelablecalled에 정의 된 상수 CONTENTS_FILE_DESCRIPTOR가 있습니다 describeContents().

API 참조CONTENTS_FILE_DESCRIPTOR 에 대한 설명 은 다음과 같습니다.

describeContents ()와 함께 사용하기위한 비트 마스크 : 각 비트는 마샬링 될 때 잠재적으로 특별한 의미가있는 것으로 간주되는 일종의 객체를 나타냅니다.

즉, FileDescriptorParcelable 에 객체를 넣어야하는 경우 CONTENTS_FILE_DESCRIPTORdescribeContents ()의 반환 값으로 지정해야합니다 . 즉, " 특수 객체 "( describeContents()의 설명에서)는 실제로 다음을 의미 FileDescriptor합니다..

이 전체 Parcelable 기능은 미완성 된 것처럼 보입니다 (읽기 : 잘못된 디자인). 문서에 또 다른 이상한 점이 있습니다.

Parcelable 인터페이스를 구현하는 클래스에는 Parcelable.Creator 인터페이스를 구현하는 객체 인 CREATOR라는 정적 필드도 있어야합니다.

사람이 읽을 수있는 형식으로 정의 된 규칙에 따라 다중 상속을 구현합니까? :-)

C ++ 프로그래머가 설계 한 것 같고 Parceable어느 시점에서 그는 깨달았습니다. 오, 젠장, Java에는 다중 상속이 없습니다 ... :-)


2
이 자세한 설명에 감사드립니다. 나는 "특별한 것이 없을 때 " 0을 반환해야 한다고 주장하는 이 튜토리얼 에 실망한 후 당신의 대답을 찾았 습니다 . 정말 아무것도 설명하지 않습니다. 당신의 설명은 훨씬 더 명확합니다! describeContents()
WebViewer 2014 년

1
@LeoLink android.os.ParcelFileDescriptor
Ognyan 2014-10-21

7
다중 상속에 관한 것이 아닙니다. Android에서 사용되는 버전이 아닌 Java 인터페이스에서 정적 메소드를 정의 할 수 없으므로이 CREATOR 필드입니다.
Aleks N.

1
@Ogre_BGR 나는 아직도 그것을 얻지 못한다. 유용 할 수있는 경우의 예제 코드를 보여줄 수 있습니까?
안드로이드 개발자

2
@androiddeveloper "정상적인"앱 개발에 사용하는 것이 아니라고 생각합니다. 프로세스간에 정보를 전달하기 위해 네이티브 메서드에서만 사용되는 것 같습니다. 살펴 보시기 바랍니다 InputChannel.java (클래스 설명 코멘트)와 android_os_Parcel.cpp을
Ognyan

7

가능한 값은 0 또는 CONTENTS_FILE_DESCRIPTOR 두 개뿐입니다.

POLO를 직렬화하는 경우이 값은 항상 0이어야하며 CONTENTS_FILE_DESCRIPTOR는 * unix 시스템에서 파일 설명자 (FD)를 직렬화 할 수있는 ParcelFileDescriptor 용으로 예약되어 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.