एंड्रॉइड वस्तुओं को क्रमबद्ध करने के लिए 2 इंटरफेस क्यों प्रदान करता है? क्या सीरियल योग्य वस्तुएं एंड्रॉइड Binder
और एआईडीएल फाइलों के साथ हस्तक्षेप करती हैं ?
एंड्रॉइड वस्तुओं को क्रमबद्ध करने के लिए 2 इंटरफेस क्यों प्रदान करता है? क्या सीरियल योग्य वस्तुएं एंड्रॉइड Binder
और एआईडीएल फाइलों के साथ हस्तक्षेप करती हैं ?
जवाबों:
एंड्रॉइड में हम वस्तुओं को सिर्फ गतिविधियों के लिए पास नहीं कर सकते। ऐसा करने के लिए वस्तुओं को या तो लागू करना चाहिए Serializable
या Parcelable
इंटरफ़ेस।
serializable
Serializable
एक मानक जावा इंटरफ़ेस है। आप बस Serializable
इंटरफ़ेस लागू कर सकते हैं और ओवरराइड विधियों को जोड़ सकते हैं। इस दृष्टिकोण के साथ समस्या यह है कि प्रतिबिंब का उपयोग किया जाता है और यह एक धीमी प्रक्रिया है। यह विधि बहुत सारी अस्थायी वस्तुओं का निर्माण करती है और काफी कचरा संग्रह का कारण बनती है। हालांकि, Serializable
इंटरफ़ेस को लागू करना आसान है।
नीचे दिए गए उदाहरण को देखें (सीरियल करने योग्य):
// MyObjects Serializable class
import java.io.Serializable;
import java.util.ArrayList;
import java.util.TreeMap;
import android.os.Parcel;
import android.os.Parcelable;
public class MyObjects implements Serializable {
private String name;
private int age;
public ArrayList<String> address;
public MyObjects(String name, int age, ArrayList<String> address) {
super();
this.name = name;
this.age = age;
this.address = address;
}
public ArrayList<String> getAddress() {
if (!(address == null))
return address;
else
return new ArrayList<String>();
}
public String getName() {
return name;
}
public String getAge() {
return age;
}
}
// MyObjects instance
MyObjects mObjects = new MyObjects("name", "age", "Address array here");
// Passing MyObjects instance via intent
Intent mIntent = new Intent(FromActivity.this, ToActivity.class);
mIntent.putExtra("UniqueKey", mObjects);
startActivity(mIntent);
// Getting MyObjects instance
Intent mIntent = getIntent();
MyObjects workorder = (MyObjects) mIntent.getSerializableExtra("UniqueKey");
Parcelable
Parcelable
की तुलना में प्रक्रिया बहुत तेज है Serializable
। इसका एक कारण यह है कि हम इसे अनुमान लगाने के लिए प्रतिबिंब का उपयोग करने के बजाय क्रमांकन प्रक्रिया के बारे में स्पष्ट हो रहे हैं। यह इस कारण से भी है कि इस उद्देश्य के लिए कोड को भारी रूप से अनुकूलित किया गया है।
नीचे दिए गए उदाहरण को देखें (Parcelable):
// MyObjects Parcelable class
import java.util.ArrayList;
import android.os.Parcel;
import android.os.Parcelable;
public class MyObjects implements Parcelable {
private int age;
private String name;
private ArrayList<String> address;
public MyObjects(String name, int age, ArrayList<String> address) {
this.name = name;
this.age = age;
this.address = address;
}
public MyObjects(Parcel source) {
age = source.readInt();
name = source.readString();
address = source.createStringArrayList();
}
@Override
public int describeContents() {
return 0;
}
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeInt(age);
dest.writeString(name);
dest.writeStringList(address);
}
public int getAge() {
return age;
}
public String getName() {
return name;
}
public ArrayList<String> getAddress() {
if (!(address == null))
return address;
else
return new ArrayList<String>();
}
public static final Creator<MyObjects> CREATOR = new Creator<MyObjects>() {
@Override
public MyObjects[] newArray(int size) {
return new MyObjects[size];
}
@Override
public MyObjects createFromParcel(Parcel source) {
return new MyObjects(source);
}
};
}
// MyObjects instance
MyObjects mObjects = new MyObjects("name", "age", "Address array here");
// Passing MyOjects instance
Intent mIntent = new Intent(FromActivity.this, ToActivity.class);
mIntent.putExtra("UniqueKey", mObjects);
startActivity(mIntent);
// Getting MyObjects instance
Intent mIntent = getIntent();
MyObjects workorder = (MyObjects) mIntent.getParcelableExtra("UniqueKey");
आप ArrayList
नीचे के रूप में पार्सलेबल ऑब्जेक्ट पास कर सकते हैं:
// Array of MyObjects
ArrayList<MyObjects> mUsers;
// Passing MyOjects instance
Intent mIntent = new Intent(FromActivity.this, ToActivity.class);
mIntent.putParcelableArrayListExtra("UniqueKey", mUsers);
startActivity(mIntent);
// Getting MyObjects instance
Intent mIntent = getIntent();
ArrayList<MyObjects> mUsers = mIntent.getParcelableArrayList("UniqueKey");
निष्कर्ष
Parcelable
Serializable
इंटरफ़ेस से तेज हैParcelable
इंटरफ़ेस की तुलना में लागू करने के लिए Serializable
इंटरफ़ेस अधिक समय लेता हैSerializable
इंटरफ़ेस को लागू करना आसान है Serializable
इंटरफ़ेस बहुत सारी अस्थायी वस्तुएँ बनाता है और काफी कचरा संग्रह का कारण बनता हैParcelable
सरणी को Android में Intent के माध्यम से पारित किया जा सकता हैSerializable एक मानक जावा इंटरफ़ेस है। आप बस इंटरफ़ेस को लागू करके एक वर्ग को सीरियल करने योग्य बनाते हैं, और जावा स्वचालित रूप से कुछ स्थितियों में इसे क्रमबद्ध करेगा।
Parcelable एक Android विशिष्ट इंटरफ़ेस है, जहाँ आप क्रमबद्धता को स्वयं कार्यान्वित करते हैं। इसे और अधिक कुशल बनाने के लिए बनाया गया था जो कि सीरियल बनाने योग्य है, और डिफ़ॉल्ट जावा क्रमांकन योजना के साथ कुछ समस्याओं को प्राप्त करने के लिए।
मेरा मानना है कि बाइंडर और एआईडीएल पार्सलेबल ऑब्जेक्ट्स के साथ काम करते हैं।
हालाँकि, आप Intents में Serializable ऑब्जेक्ट्स का उपयोग कर सकते हैं।
पार्सलेबल बनाम सीरियल मैं इन दोनों को संदर्भित करता हूं।
जावा और कोटलिन के लिए
1) जावा
सीरियल, सिंपलिसिटी
Serializable क्या है?
Serializable एक मानक जावा इंटरफ़ेस है। यह एंड्रॉइड एसडीके का हिस्सा नहीं है। इसकी सादगी ही इसकी खूबसूरती है। बस इस इंटरफ़ेस को लागू करने से आपका POJO एक गतिविधि से दूसरी गतिविधि में कूदने के लिए तैयार हो जाएगा।
public class TestModel implements Serializable {
String name;
public TestModel(String name) {
this.name = name;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
सीरियल करने योग्य की सुंदरता यह है कि आपको केवल एक वर्ग और उसके बच्चों पर सीरियल मॉडल को लागू करने की आवश्यकता है। यह एक मार्कर इंटरफ़ेस है, जिसका अर्थ है कि इसे लागू करने की कोई विधि नहीं है, जावा बस इसे कुशलता से क्रमबद्ध करने के लिए अपना सर्वश्रेष्ठ प्रयास करेगा।
इस दृष्टिकोण के साथ समस्या यह है कि प्रतिबिंब का उपयोग किया जाता है और यह एक धीमी प्रक्रिया है। यह तंत्र बहुत सारी अस्थायी वस्तुओं का निर्माण करता है और काफी कचरा संग्रह का कारण बनता है।
पार्सलेबल, द स्पीड
पार्सलबल क्या है?
Parcelable एक अन्य इंटरफ़ेस है। अपने प्रतिद्वंद्वी (सीरियल के मामले में आप भूल गए) के बावजूद, यह एंड्रॉइड एसडीके का एक हिस्सा है। अब, पार्सलबल को विशेष रूप से इस तरह से डिज़ाइन किया गया था कि इसका उपयोग करते समय कोई प्रतिबिंब न हो। ऐसा इसलिए है क्योंकि हम क्रमांकन प्रक्रिया के लिए वास्तव में स्पष्ट हैं।
public class TestModel implements Parcelable {
String name;
public TestModel(String name, String id) {
this.name = name;
}
protected TestModel(Parcel in) {
this.name = in.readString();
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public int describeContents() {
return 0;
}
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeString(this.name);
}
public static final Parcelable.Creator<TestModel> CREATOR = new Parcelable.Creator<TestModel>() {
@Override
public TestModel createFromParcel(Parcel source) {
return new TestModel(source);
}
@Override
public TestModel[] newArray(int size) {
return new TestModel[size];
}
};
}
अब, विजेता है
Philippe Breault द्वारा किए गए परीक्षणों के परिणाम बताते हैं कि Parcelable Serializable की तुलना में 10x से अधिक तेज है। Google के कुछ अन्य इंजीनियर भी इस कथन के पीछे खड़े हैं।
उनके अनुसार, डिफ़ॉल्ट Serializable दृष्टिकोण Parcelable की तुलना में धीमा है। और यहाँ हम दोनों पक्षों के बीच एक समझौता है! लेकिन, इन दोनों की तुलना करना अनुचित है! क्योंकि Parcelable के साथ हम वास्तव में कस्टम कोड लिख रहे हैं। कोड विशेष रूप से उस एक POJO के लिए बनाया गया है। इस प्रकार, कोई कचरा पैदा नहीं होता है और परिणाम बेहतर होते हैं। लेकिन डिफ़ॉल्ट अनुक्रमिक दृष्टिकोण के साथ, हम जावा के स्वचालित क्रमांकन प्रक्रिया पर भरोसा करते हैं। प्रक्रिया स्पष्ट रूप से बिल्कुल भी कस्टम नहीं है और बहुत सारे कचरे का निर्माण करती है! इस प्रकार, खराब परिणाम।
स्टॉप स्टॉप !!!!, निर्णय लेने से पहले
अब, एक और दृष्टिकोण है । Serializable के पीछे की पूरी स्वचालित प्रक्रिया को कस्टम कोड द्वारा प्रतिस्थापित किया जा सकता है जो writeObject () और readObject () विधियों का उपयोग करता है। ये तरीके विशिष्ट हैं। यदि हम कस्टम क्रमांकन व्यवहार के साथ संयोजन में अनुक्रमिक दृष्टिकोण पर भरोसा करना चाहते हैं, तो हमें नीचे दिए गए एक ही हस्ताक्षर के साथ इन दो विधियों को शामिल करना होगा:
private void writeObject(java.io.ObjectOutputStream out)
throws IOException;
private void readObject(java.io.ObjectInputStream in)
throws IOException, ClassNotFoundException;
private void readObjectNoData()
throws ObjectStreamException;
और अब Parcelable और custom Serializable के बीच तुलना उचित लगती है! परिणाम आश्चर्यजनक हो सकते हैं! कस्टम Serializable दृष्टिकोण लिखने के लिए 3x से अधिक तेज है और Parcelable की तुलना में 1.6x तेजी से पढ़ता है।
संपादित: -----
2) कोटलिनिक्स सीरियल
Kotlinx Serialization Library
For Kotlin serialization need to add below dependency and plugin
implementation "org.jetbrains.kotlinx:kotlinx-serialization-runtime:0.9.1"
apply plugin: 'kotlinx-serialization'
आपकी build.gradle
फ़ाइल
apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-android-extensions'
apply plugin: 'kotlinx-serialization'
android {
compileSdkVersion 28
defaultConfig {
applicationId "com.example.smile.kotlinxretrosample"
minSdkVersion 16
targetSdkVersion 28
versionCode 1
versionName "1.0"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
}
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
implementation "org.jetbrains.kotlinx:kotlinx-serialization-runtime:0.9.1"
implementation 'com.android.support:appcompat-v7:28.0.0'
implementation 'com.android.support.constraint:constraint-layout:1.1.3'
implementation 'com.android.support:design:28.0.0'
implementation 'com.squareup.retrofit2:retrofit:2.5.0'
implementation 'com.squareup.okhttp3:okhttp:3.12.0'
testImplementation 'junit:junit:4.12'
androidTestImplementation 'com.android.support.test:runner:1.0.2'
androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
}
Serializing काफी आसानी से की जाती है, आपको @Serializable
नीचे दिए गए एनोटेशन के साथ इच्छित वर्ग को एनोटेट करना होगा
import kotlinx.serialization.Serializable
@Serializable
class Field {
var count: Int = 0
var name: String = ""
}
नोट करने के लिए दो और एनोटेशन हैं transient
और optional
। क्षणिक का उपयोग करने से धारावाहिक को उस क्षेत्र की अनदेखी होगी और वैकल्पिक का उपयोग करने से धारावाहिक को तोड़ने की अनुमति नहीं होगी यदि कोई फ़ील्ड गायब है, लेकिन साथ ही साथ एक डिफ़ॉल्ट मान प्रदान करना होगा।
@Optional
var isOptional: Boolean = false
@Transient
var isTransient: Boolean = false
नोट : यह डेटा वर्गों के साथ भी काम कर सकता है।
अब वास्तव में इस क्रिया का उपयोग करने के लिए आइए एक उदाहरण लेते हैं कि JSON को ऑब्जेक्ट और बैक में कैसे परिवर्तित किया जाए
fun toObject(stringValue: String): Field {
return JSON.parse(Field.serializer(), stringValue)
}
fun toJson(field: Field): String {
//Notice we call a serializer method which is autogenerated from our class
//once we have added the annotation to it
return JSON.stringify(Field.serializer(), field)
}
के लिए और अधिक
Serialization
, एक नज़र।
यदि आप एक अच्छे नागरिक बनना चाहते हैं, तो पार्सल को लागू करने के लिए अतिरिक्त समय लें क्योंकि यह 10 गुना तेज प्रदर्शन करेगा और कम संसाधनों का उपयोग करेगा।
हालांकि, ज्यादातर मामलों में, सीरियल की सुस्ती का ध्यान नहीं जाएगा। इसे उपयोग करने के लिए स्वतंत्र महसूस करें लेकिन याद रखें कि क्रमांकन एक महंगा ऑपरेशन है इसलिए इसे कम से कम रखें।
यदि आप हजारों अनुक्रमित वस्तुओं के साथ एक सूची पास करने की कोशिश कर रहे हैं, तो संभव है कि पूरी प्रक्रिया में एक सेकंड से अधिक समय लगेगा। यह चित्र से लैन्सस्केप तक के बदलाव या घुमाव को बहुत सुस्त महसूस कर सकता है।
इस बिंदु का स्रोत: http://www.developerphil.com/parcelable-vs-serializable/
पार्सेबल में, डेवलपर्स मार्शलिंग और अनमर्शिंग के लिए कस्टम कोड लिखते हैं ताकि यह Serialization की तुलना में कम कचरा वस्तुओं का निर्माण करे। इस कस्टम कार्यान्वयन की वजह से सीरियललाइज़ेशन पर पार्सल के प्रदर्शन में नाटकीय रूप से सुधार (लगभग दो गुना तेज) होता है।
Serializable एक मार्कर इंटरफ़ेस है, जिसका अर्थ है कि उपयोगकर्ता अपनी आवश्यकताओं के अनुसार डेटा को मार्शल नहीं कर सकता है। सीरियलाइज़ेशन में, जावा प्रतिबिंब एपीआई का उपयोग करके एक जावा वर्चुअल मशीन (जेवीएम) पर एक मार्शलिंग ऑपरेशन किया जाता है। यह जावा ऑब्जेक्ट के सदस्य और व्यवहार की पहचान करने में मदद करता है, लेकिन बहुत सारे कचरा वस्तुओं का निर्माण भी करता है।इसके कारण, पार्सलबल की तुलना में सीरियलाइजेशन प्रक्रिया धीमी है।
संपादित करें: मार्शलिंग और अनमर्सहॉलिंग का अर्थ क्या है?
कुछ शब्दों में, "मार्शलिंग" डेटा या वस्तुओं को बाइट-स्ट्रीम में परिवर्तित करने की प्रक्रिया को संदर्भित करता है, और "अनस्मर्शलिंग" बाइट-स्ट्रीम बीक को उनके मूल डेटा या ऑब्जेक्ट में परिवर्तित करने की रिवर्स प्रक्रिया है। रूपांतरण "क्रमांकन" के माध्यम से प्राप्त किया जाता है।
मैं वास्तव में सीरियल के लिए वकालत करने वाला एक लड़का होने जा रहा हूं। गति का अंतर इतना अधिक नहीं है क्योंकि उपकरण कई साल पहले की तुलना में बेहतर हैं और अन्य, अधिक सूक्ष्म अंतर भी हैं। अधिक जानकारी के लिए इस मुद्दे पर मेरा ब्लॉग पोस्ट देखें ।
डेटा ट्रांसफ़र के लिए पार्सेबल की सिफारिश की जाती है। लेकिन अगर आप इस रेपो में दिखाए गए अनुसार सही रूप से क्रमिक उपयोग करते हैं , तो आप देखेंगे कि क्रमबद्धता कभी-कभी और भी तेज होती है। या कम से कम समय तुलनीय हैं।
औसत Android डिवाइस पर सामान्य जावा क्रमांकन (यदि सही किया जाता है) लिखने के लिए पार्सल के मुकाबले लगभग 3.6 गुना तेज और रीड के लिए लगभग 1.6 गुना तेज है। इसके अलावा यह साबित होता है कि जावा सीरियलाइज़ेशन (यदि सही किया गया है) तेजी से भंडारण तंत्र है जो प्रत्येक 10 क्षेत्रों के साथ 11000 वस्तुओं के अपेक्षाकृत बड़े ऑब्जेक्ट ग्राफ के साथ भी स्वीकार्य परिणाम देता है।
* विचार यह है कि आम तौर पर हर कोई जो आँख बंद करके कहता है कि "पार्सलबल तेज़ होता है" इसकी तुलना डिफ़ॉल्ट रूप से स्वचालित क्रमांकन से की जाती है, जो अंदर बहुत अधिक प्रतिबिंब का उपयोग करता है। यह अनुचित तुलना है, क्योंकि पार्सलबल स्ट्रीम में डेटा लिखने की प्रक्रिया का मैनुअल (और बहुत जटिल) उपयोग करता है। आमतौर पर जो उल्लेख नहीं किया गया है, वह यह है कि डॉक्स के अनुसार मानक जावा सीरियलाइज़ेशन को राइटऑबजेक्ट () और रीडऑब्जेक्ट () विधियों का उपयोग करके मैन्युअल तरीके से भी किया जा सकता है। अधिक जानकारी के लिए JavaDocs देखें। यह है कि यह सबसे अच्छा प्रदर्शन के लिए कैसे किया जाना चाहिए।
कारण है देशी कोड। पार्सलबल केवल इंटरप्रोसेस संचार के लिए नहीं बनाया गया है। इसका उपयोग इंटरकोड संचार के लिए भी किया जा सकता है । आप C ++ की मूल परत से ऑब्जेक्ट भेज और पुन: प्राप्त कर सकते हैं। बस।
आपको क्या चुनना चाहिए? दोनों अच्छा काम करेंगे। लेकिन मुझे लगता है कि Parcelable बेहतर विकल्प है क्योंकि यह Google द्वारा अनुशंसित है और जैसा कि आप देख सकते हैं इस धागे से बहुत अधिक सराहना की जाती है।
@ वे http://docs.oracle.com/javase/7/docs/api/java/io/Serializable.html
@ वे http://developer.android.com/reference/android/os/Parcelable.html
ज्ञात हो कि Serializable एक मानक जावा इंटरफ़ेस है, और Parcelable Android विकास के लिए है
मार्शल और अनमैर्शलिंग के संबंध में कुछ प्रदर्शन समस्या है। Parcelable Serializable की तुलना में दोगुना तेज है।
कृपया निम्न लिंक से गुजरें:
http://www.3pillarglobal.com/insights/parcelable-vs-java-serialization-in-android-app-development
Serializable इंटरफ़ेस को Parcelable एक के समान उपयोग किया जा सकता है, जिसके परिणामस्वरूप बेहतर प्रदर्शन नहीं होता है। बस उन दो तरीकों को अधिलेखित करें जो मैनुअल मार्शालिंग और अनमर्सहॉलिंग प्रक्रिया को संभालने के लिए हैं:
private void writeObject(java.io.ObjectOutputStream out)
throws IOException
private void readObject(java.io.ObjectInputStream in)
throws IOException, ClassNotFoundException
फिर भी, यह मुझे लगता है कि देशी एंड्रॉइड को विकसित करते समय, एंड्रॉइड एप का उपयोग करने का तरीका है।
देख :
मुझे उत्तर देने में देर हो रही है, लेकिन इस उम्मीद के साथ पोस्ट कर रहा हूं कि इससे दूसरों को मदद मिलेगी।
के संदर्भ में स्पीड , Parcelable > Serializable
। लेकिन, कस्टम सीरियल करने योग्य अपवाद है। यह लगभग Parcelable या इससे भी अधिक तेज की सीमा में है।
संदर्भ: https://www.geeksforgeeks.org/customized-serialization-and-deserialization-in-java/
उदाहरण :
कस्टम वर्ग को क्रमबद्ध किया जाना है
class MySerialized implements Serializable {
String deviceAddress = "MyAndroid-04";
transient String token = "AABCDS"; // sensitive information which I do not want to serialize
private void writeObject(ObjectOutputStream oos) throws Exception {
oos.defaultWriteObject();
oos.writeObject("111111" + token); // Encrypted token to be serialized
}
private void readObject(ObjectInputStream ois) throws Exception {
ois.defaultReadObject();
token = ((String) ois.readObject()).subString(6); // Decrypting token
}
}
बाइंडर के साथ सीरियल करने योग्य की तुलना में बहुत अधिक तेजी से पार्सल करने योग्य है, क्योंकि सीरियल करने योग्य उपयोग प्रतिबिंब और कई जीसी का कारण बनता है। पार्सलबल ऑब्जेक्ट पास करने के लिए अनुकूलन करने के लिए डिज़ाइन है।
यहाँ संदर्भ के लिए लिंक है। http://www.developerphil.com/parcelable-vs-serializable/
आप धारावाहिक में उपयोग करने योग्य वस्तुओं का उपयोग कर सकते हैं, लेकिन धारावाहिक को पार्सल करने योग्य वस्तु बनाने के समय यह NotSerializableException जैसे गंभीर अपवाद दे सकता है। क्या यह पार्सलबल के साथ क्रमिक उपयोग करने की अनुशंसा नहीं की जाती है। इसलिए पार्सल को उस वस्तु के साथ विस्तारित करना बेहतर है जिसे आप बंडल और इंटेंट के साथ उपयोग करना चाहते हैं। चूँकि यह Parcelable Android विशिष्ट है, इसलिए इसका कोई दुष्प्रभाव नहीं है। :)
serializable
सीरियल करने योग्य एक चिह्नित इंटरफ़ेस है या हम एक खाली इंटरफ़ेस के रूप में कॉल कर सकते हैं। इसका कोई पूर्व-कार्यान्वित तरीका नहीं है। सीरियल देखने योग्य एक वस्तु को बाइट स्ट्रीम में बदलने जा रहा है। तो उपयोगकर्ता एक गतिविधि से दूसरी गतिविधि के बीच डेटा को पारित कर सकता है। सीरियल करने योग्य का मुख्य लाभ सृजन और पासिंग डेटा बहुत आसान है लेकिन यह पार्सल की तुलना में धीमी प्रक्रिया है।
Parcelable
पार्सल सक्षम धारावाहिक से तेज है। पार्सल सक्षम वस्तु को बाइट स्ट्रीम में बदलने और दो गतिविधियों के बीच डेटा पास करने में सक्षम है। लेखन पार्सल सक्षम कोड क्रमांकन की तुलना में थोड़ा जटिल है। यह दो गतिविधियों के बीच डेटा पास करते समय अधिक अस्थायी ऑब्जेक्ट नहीं बनाता है।