Parcelable जहाँ / कब वर्णन किया जाता है () का उपयोग किया जाता है?


93

क्या किसी को पता है कि पार्सल के इस तरीके को कहाँ / कब कहा जाता है?

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

इसे ओवरराइड करना होगा। लेकिन क्या मुझे इसके साथ कुछ उपयोगी करने पर विचार करना चाहिए?


लगता है किसी को अंदाजा नहीं है ..? : - /
cody

जवाबों:


181

वहाँ एक निरंतर में परिभाषित किया गया है Parcelableकहा जाता है CONTENTS_FILE_DESCRIPTORजो में इस्तेमाल किया जा करने के लिए है describeContents()वापसी मान bitmask बनाने के लिए।

के लिए विवरण CONTENTS_FILE_DESCRIPTORमें एपीआई रेफरी है:

डिस्क्रिप्शन कॉन्टेंट () के साथ उपयोग के लिए बिट मास्क: प्रत्येक बिट एक प्रकार की वस्तु का प्रतिनिधित्व करता है जिसे मार्शेल्ड होने पर संभावित विशेष महत्व माना जाता है।

जिसका वास्तव में अर्थ है: यदि आपको FileDescriptorपार्सल में ऑब्जेक्ट डालने की आवश्यकता है, तो आपको वर्णन विशेषकों CONTENTS_FILE_DESCRIPTOR(), अर्थात " विशेष ऑब्जेक्ट " ( describeContents()'विवरण' में ) के रिटर्न मान के रूप में निर्दिष्ट करना चाहिए : उनका वास्तव में मतलब है FileDescriptor:।

यह पूरी पार्सल कार्यक्षमता अधूरी दिखती है (पढ़ें: खराब डिजाइन है)। डॉक्स में एक और अजीब बात है:

Parcelable इंटरफ़ेस को लागू करने वाली कक्षाओं में CREATOR नामक एक स्थिर फ़ील्ड भी होना चाहिए, जो Parcelable.Creator इंटरफ़ेस को लागू करने वाली एक वस्तु है

मानव पठनीय रूप में परिभाषित नियमों द्वारा कई विरासत को लागू करना? :-)

ऐसा लगता है कि C ++ प्रोग्रामर द्वारा डिज़ाइन किया गया है Parceableऔर किसी बिंदु पर उसे एहसास हुआ है: ओह, अरे, जावा में कोई बहु विरासत नहीं है ... :-)


2
इस विस्तृत विवरण के लिए धन्यवाद। मैंने इस ट्यूटोरियल से निराश होने के बाद आपका जवाब पाया कि यह दावा किया describeContents()जाना चाहिए कि जब भी इसे "इसके बारे में कुछ खास नहीं" होना चाहिए । जो वास्तव में कुछ भी स्पष्ट नहीं करता है। आपका स्पष्टीकरण इतना स्पष्ट है!
व्यूअर

1
@LeoLink android.os.ParcelFileDescriptor
Ognyan

7
यह कई उत्तराधिकार के बारे में नहीं है। आप जावा इंटरफ़ेस में एक स्थिर विधि को परिभाषित नहीं कर सकते हैं, न कि एंड्रॉइड में उपयोग किए जाने वाले संस्करण में, इसलिए यह निर्माता क्षेत्र है।
एलेक्स एन।

1
@Ogre_BGR मुझे अभी भी नहीं मिला है। शायद आप एक उदाहरण कोड दिखा सकते हैं कि यह कब उपयोगी हो सकता है?
Android डेवलपर

2
@androiddeveloper मुझे लगता है कि "सामान्य" ऐप के विकास में इसका उपयोग करना मानसिक नहीं है। ऐसा लगता है कि यह केवल प्रक्रियाओं के बीच जानकारी पारित करने के लिए देशी तरीकों द्वारा उपयोग किया जाता है। कृपया InputChannel.java (टिप्पणी का वर्णन करने वाला वर्ग) और android_os_Parcel.cpp
Ognyan

7

केवल दो संभावित मूल्य हैं, 0 या CONTENTS_FILE_DESCRIPTOR

यदि आप POLO को क्रमबद्ध कर रहे हैं, तो यह मान हमेशा 0 होना चाहिए, CONTENTS_FILE_DESCRIPTOR ParcelFileDescriptor के लिए आरक्षित है , जो एक फाइल डिस्क्रिप्टिव (FD) को * यूनिक्स प्रणाली में क्रमबद्ध कर सकता है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.