Czy ktoś wie, gdzie / kiedy wywoływana jest ta metoda Parcelable ?
@Override
public int describeContents() {
return 0;
}
Musi zostać zastąpiony. Ale czy powinienem rozważyć zrobienie z nim czegoś użytecznego?
Czy ktoś wie, gdzie / kiedy wywoływana jest ta metoda Parcelable ?
@Override
public int describeContents() {
return 0;
}
Musi zostać zastąpiony. Ale czy powinienem rozważyć zrobienie z nim czegoś użytecznego?
Odpowiedzi:
W
Parcelable
wywołaniu zdefiniowano stałą,CONTENTS_FILE_DESCRIPTOR
której należy użyćdescribeContents()
do utworzenia wartości zwracanej przez maskę bitową.Opis
CONTENTS_FILE_DESCRIPTOR
w referencji API to:Co naprawdę oznacza: Jeśli trzeba umieścić
FileDescriptor
obiekt w Parcelable powinieneś / musi określaćCONTENTS_FILE_DESCRIPTOR
jako wartości zwracanej describeContents (), czyli o „ szczególnym obiektem ” (wdescribeContents()
„s opis) tak naprawdę chodziłoFileDescriptor
.Ta cała funkcjonalność Parcelable wygląda na niedokończoną (czytaj: ma zły projekt). W dokumentach jest jeszcze jedna dziwna rzecz:
Wdrażasz wielokrotne dziedziczenie przez reguły zdefiniowane w formie czytelnej dla człowieka? :-)
Wygląda na to, że programista C ++ zaprojektował
Parceable
i w pewnym momencie zdał sobie sprawę: O cholera, w Javie nie ma wielokrotnego dziedziczenia ... :-)źródło
describeContents()
powinien zwrócić 0, gdy „nie ma w tym nic specjalnego” . Co tak naprawdę niczego nie wyjaśnia. Twoje wyjaśnienie jest o wiele jaśniejsze!Są tylko dwie możliwe wartości, 0 lub CONTENTS_FILE_DESCRIPTOR
jeśli serializujesz POLO, ta wartość powinna zawsze wynosić 0, CONTENTS_FILE_DESCRIPTOR jest zarezerwowana dla ParcelFileDescriptor , który może serializować deskryptor pliku (FD) w systemie * unix.
źródło
Z platformy Android,
//ActivityManagerService.java public int startActivityIntentSender(IApplicationThread caller, IntentSender intent, Intent fillInIntent, String resolvedType, IBinder resultTo, String resultWho, int requestCode, int flagsMask, int flagsValues) { // Refuse possible leaked file descriptors if (fillInIntent != null && fillInIntent.hasFileDescriptors()) { throw new IllegalArgumentException("File descriptors passed in Intent"); } //... }
Intent.java hasFileDescriptors () pochodzi z Bundle.java hasFileDescriptors (). Pakiet będzie iterował wszystkie dane w mMap lub mParcelledData. Dowiemy się, jak używać funkcji descriptionContents ().
Chociaż, być może jest to jedyne użycie opisania treści do filtrowania FileDescriptor z przejścia intencji ...
źródło