2012-02-17 10 views
30

तो मुझे पता है कि एंड्रॉइड में सीरियलज़ेबल के बजाय पार्ससेलबल का उपयोग करने की अनुशंसा की जाती है, क्योंकि यह तेज़ है।एंड्रॉइड पार्सेलबल और सीरियलज़ेबल

मेरा प्रश्न है: क्या सीरियलज़ेबल सही उपयोग करने से बचना असंभव है?

अगर मैं मैं क्रमानुसार करने चाहते हैं एक कस्टम वस्तु है, मान लीजिए कि मैं निम्नलिखित वर्ग परिभाषा

public class Person { 
    String name; 
    int Age; 
    ... 
    .... 
} 

बनाना इस parcelable आसान है, क्योंकि व्यक्ति वर्ग प्रकार parcel.write *() का समर्थन करता है शामिल करते हैं अर्थात है parcel.writeString और parcel.writeInt

अब, क्या हुआ अगर व्यक्ति वर्ग निम्नलिखित है:

public class PersonTwo { 
    MyCustomObj customObj; 
    String name; 
    int Age; 
    ... 
    .... 
} 

मैं कैसे बराबर लगता हूँ MyCustomObj ऑब्जेक्ट सेल ?? ऐसा लगता है कि मुझे फिर से क्रमबद्ध करने की आवश्यकता है? लेकिन फिर, मैंने सोचा कि यह धारावाहिक उपयोग करने के लिए धीमा है, और ऐसा लगता है कि इस मामले में इसका उपयोग करने के अलावा हमारे पास कोई विकल्प नहीं है।

मुझे समझ नहीं आता

कोई मुझे बताओ कि मैं इस मामले में PersonTwo पार्सल हैं कर सकते हैं?

+2

मैं आपको सीरियलज़ेबल का उपयोग करने का सुझाव देता हूं। नेक्सस 5 पर किए गए परीक्षणों के अनुसार यह पार्सेलबल की तुलना में बहुत तेज़ है। Https://bitbucket.org/afrishman/androidserializationtest देखें। याद रखने की मुख्य बात यह है कि Serializable केवल डिफ़ॉल्ट सेटिंग्स के साथ धीमा है। यदि आप मैन्युअल क्रमिकरण का उपयोग करते हैं, तो यह बहुत तेज़ है। विवरण के लिए उपरोक्त लिंक देखें। – nucleo

उत्तर

2

आपको MyCustomObj पार्सल करने योग्य बनाने की आवश्यकता है।

16

अजय द्वारा दिया गया लिंक सटीक है जो आप खोज रहे हैं, आप इसे कैसे कर सकते हैं। ठीक है, आप क्या कर सकते अपने CustomObject1 को Parcelable को लागू करने और इसके लिए एक Parcelable वर्ग बनाने और उसके बाद आप एक और Parcelable वर्ग है कि दोनों CustomObjects पार्सल जाएगा अंदर Parcel के लिए यह है कि Parcelable वर्ग का उपयोग कर सकते है।

public class CustomObject1 implements Parcelable { 

    // parcelable code CustomObject1 
} 

public class CustomObject2 implements Parcelable { 

    private CustomObject1 obj1; 

    // add CustomObject1 here with getter setter 
    // parcelable code for CustomObject2 

    @Override 
    public void writeToParcel(Parcel dest, int flags) { 
     dest.writeParcelable(obj1, flags); 
    } 
    private void readFromParcel(Parcel in) { 
     obj1 = in.readParcelable(CustomObject1.class.getClassLoader()); 
    } 
    ............ 
} 
+2

धन्यवाद दोस्त, मैं आपको और अजय दोनों को जवाब के रूप में स्वीकार कर लेता, लेकिन लगता है कि मैं केवल एक ही चुन सकता हूं। आपका धन्यावाद!! – user1118019

+1

हां यह जगह पर है और मैं इसे कैसे करता हूं। बस प्रत्येक ऑब्जेक्ट को आवश्यक, पार्सल करने योग्य बनाएं क्योंकि इसके अंत में, रूट ऑब्जेक्ट में आदिम या स्ट्रिंग प्रकार – jonney

-1

मैं उस बिंदु पर आया जहां पार्ससेल मेरे लिए एक मुद्दा है। एंड्रॉइड 4.3 पर, पार्ससेल के रूप में गतिविधियां के बीच डेटा पास करते समय, मुझे अनमोल अपवाद मिल रहा है। यह एंड्रॉइड 4.0, 4.2 या 4.4 पर ठीक काम करता है। सीरियलज़ेबल में बदलते समय इसे काम करना चाहिए, भले ही यह धीमा हो।

+0

अच्छी तरह से होंगे, जो मैं अनुभव करता हूं और लॉगकट में देखता हूं ... – MartinC

+2

कृपया कुछ कोड जोड़ें ताकि whe भी जांच सके अगर समस्या एंड्रॉइड के भीतर ही होती है। – silverado

0

सभी समग्र वस्तुओं को पार्सलबल भी होना चाहिए। यदि आप किसी ऑब्जेक्ट को छोड़ना चाहते हैं तो इसे लिखने के लिए टॉपरसेल विधि का उपयोग न करें।

संबंधित मुद्दे