ما الفرق بين Parcelable و Serialization المستخدم في android

اريد ان اعرف بالضبط

  1. ما إذا كان ينبغي استخدام تقنية قابلة للتجزئة أو التسلسل لإرسال البيانات من نشاط إلى آخر؟
  2. هل هو إلزامي استخدام واحد منهم لإرسال البيانات من واحد إلى آخر؟ </لى>
  3. متى يجب علي استخدامها؟ </لى>
  4. والفرق الدقيق بينهما والأداء لكل منهما في جوانب جافا.

شكرا مقدما.


 public class GetSetClass implements Serializable {
    private int dt = 10;

    /** pass any object, drwabale */
    public int getDt() {
        return dt;
    }

    public void setDt(int dt) {
        this.dt = dt;
    }
}
32
ما الحاجة إلى التسلسل من الكائنات في الروبوت؟ قد لا نؤدي المهمة بدون تسلسل الأشياء؟
وأضاف المؤلف SRam, مصدر
وأضاف المؤلف verisimilitude, مصدر
استخدم الأحرف الكبيرة لبدء اسم فئة ( GetSetClass أو Getsetclass ).
وأضاف المؤلف keyser, مصدر

5 إجابة

ترتبط هذه المفاهيم بـ Inter-Communication Communication (IPC).

عند إرسال البيانات بين تطبيقين ، علينا التأكد من أن كلا التطبيقين يجب أن يفهموا شكل البيانات التي يتم إرسالها.

خاصة عند إرسال قيم نوع البيانات غير البدائية مثل الفئات والكائنات بين تطبيقين ، يجب علينا تحويلها إلى تنسيق قابل للتنفيذ في نظام التشغيل. O.S يفهم فقط الأنواع البدائية (ints، chars، etc). سبب التحويل هو أن لدينا قناة اتصال في O.S لإرسال البيانات.

تسمى عملية تحويل الأنواع غير البدائية إلى المواد الأولية وإرسالها إلى تطبيقات أخرى عبر بعض قنوات الاتصال باسم التسلسل. تسمى العملية العكسية باسم De Serialization.

في Java ، يعتمد IPC بشكل كبير على Serializables للتسلسل. ولكن تم تصميم التسلسل عن طريق الحفاظ على تطبيقات سطح المكتب في الاعتبار. عندما تقوم بتطبيق IPC في تطبيقات الهاتف المحمول ، يجب أن نتأكد من أن عملية IPC ليست ثقيلة للغاية.

وبتعبير بسيط ، فإن التسلسل هو مفهوم ثقيل لـ IPC. لذا بدلاً من التسلسل ، اختار Android لمجلدات الربط لتحقيق التواصل بين العمليات الخفيفة الوزن. تعتمد المواد اللاصقة داخليًا بشكل كبير على الطرود ، لإجراء التصنيف الدولي للبراءات. الطرود من المسلسلات الخفيفة الوزن. يفضل استخدام الطرود لترتيب الكائنات في تدفقات بايت.

ملاحظة: يعتمد Binder IPC بشكل كبير على مفهوم الذاكرة المشتركة للتأكد من عدم وجود تكرار كبير للبيانات أثناء المشاركة بين التطبيقات.

25
وأضاف
ليس لدي أي فكرة عن سبب عدم حصول هذا الجواب على أي تغيير حتى الآن ، وهو أمر مكتمل تمامًا ولأكون صادقًا ، وهو أحد أفضل الميزات بالنسبة لي.
وأضاف المؤلف GoRoS, مصدر
vsvankhede حسنًا ، يبدو أن هناك وقتًا ومكانًا لكل شيء ، وهو حاليًا أكثر الأوقات ربحًا.
وأضاف المؤلف GoRoS, مصدر

ما إذا كان يمكنني استخدام تقنية القطف أو التسلسل لإرسال البيانات من نشاط إلى آخر.

إذا كنت ترسل بيانات/كائنات غير أولية إلى نشاط آخر عبر intent ، يجب عليك إما Serialize أو تنفيذ Parcelable لهذا الكائن . الأسلوب المفضل هو Parcelable لأنه لا يؤثر على الأداء.

هل يلزم استخدام أحدها لإرسال البيانات من واحد إلى آخر./متى يجب استخدامها.

إنه إلزامي/مستخدم فقط لإرسال كائنات البيانات غير البدائية.

والفرق الدقيق بينهما وأداء كل منهما في جوانب جافا.

Serialization does impact the performance. For more details check this link Android Parcelable and Serializable

19
وأضاف
hi arun جورج ، .. لماذا يجب استخدام التسلسل لنوع البيانات غير البدائي فقط؟ ولماذا يعتبر إلزامياً لنوع dat غير البدائي فقط؟
وأضاف المؤلف SRam, مصدر
حسنًا ، شكرًا على الإجابة عن سؤال واحد آخر .. عندما نستخدم الحزمة لإرسال البيانات وما الحاجة إلى وضع الكائن في حزمة intent.putExtras (معرف السلسلة ، PRIMITIVE_DATA_TYPE) إذا استخدمنا التسلسل لإرسال البيانات ..
وأضاف المؤلف SRam, مصدر
يمكن تمرير أنواع البيانات الأولية من نشاط إلى آخر باستخدام intent.putExtras (معرف السلسلة ، PRIMITIVE_DATA_TYPE) والوصول إليه في النشاط الآخر الآخر باستخدام المكافئ getMethod() لهذا النوع. ولكن هذا ليس هو الحال بالنسبة لأنواع البيانات التي يحددها المستخدم وبالتالي يجب عليك استخدام serialization أو Parcelable .
وأضاف المؤلف Arun George, مصدر

حصلت على شرح جيد جدا للفرق بين القبلية والتسلسل.

للبدء بسؤالك على الرغم من أنه كان وقتًا طويلاً ، فقد يساعد الآخرين:

<�رأ>   
  • ما إذا كان يمكنني استخدام تقنية القطف أو التسلسل لإرسال البيانات من نشاط إلى آخر؟
  •   

الجواب: الطرد هو أفضل خيار (لماذا شرح في وقت لاحق).

      
  1. هل يلزم استخدام أحدها لإرسال البيانات من واحد إلى آخر؟
  2.   

الإجابة: نعم ، نظرًا لأن إرسال البيانات (الكائن) من واحد إلى آخر يتطلب تدفقات واسترجاع تدفقات البايتات ويمكن القيام بذلك إما من خلال القابلية للتسلسل أو التسلسل.

      
  1. متى يجب علي استخدامها؟
  2.   

الإجابة: هذا الجزء الذي أجيب عليك الإجابة عليه ، أي تمرير البيانات من نشاط إلى آخر.

      
  1. والفرق الدقيق بينهما وأداء كل منهما في جوانب جافا.
  2.   

الإجابة: 1. يتم توثيق الطرود بشكل جيد في Android SDK ؛ التسلسل من ناحية أخرى متاح في جافا.

  1. في Parcelable ، يقوم المطورون بكتابة تعليمات برمجية مخصصة للتعبئة وتحيط التنظيم بحيث يتم إنشاء عدد أقل من كائنات القمامة مقارنة بالتسلسل. أداء Parcelable عبر Serialization يتحسن بشكل كبير (حوالي مرتين أسرع) ، بسبب هذا التنفيذ المخصص.

  2. التسلسل هو واجهة علامة ، مما يعني أنه لا يمكن للمستخدم تنظيم البيانات وفقًا لمتطلباتها. في Serialization ، يتم تنفيذ عملية التنظيم على Java Virtual Machine (JVM) باستخدام Java reflection API. يساعد ذلك في التعرف على عضو كائن Java وسلوكه ، ولكنه ينتهي أيضًا بإنشاء الكثير من كائنات القمامة. ونتيجة لذلك ، فإن عملية التسلسل تكون بطيئة مقارنة ببارسلابل.

    </لى>

Answer taken from: this link

See also:serialization explained

5
وأضاف

Java Serializable:- Serializable comes from standard Java and is much easier to implement all you need to do is implement the Serializable interface and add override two methods.
The problem with Serializable is that it tries to appropriately handle everything under the sun and uses a lot reflection to make determine the types that are being serialized. So it becomes a beefy Object.

Androids Parcelable:- Android Inter-Process Communication (AIPC) file to tell Android how is should marshal and unmarshal your object.It is less generic and doesn't use reflection so it should have much less overhead and be a lot faster.

Read More from http://www.3pillarglobal.com/blog/parcelable-vs-java-serialization-android-app-development

3
وأضاف
يمنحك تسليط الضوء على المشكلة مع التسلسل هذه الإجابة على +1
وأضاف المؤلف Richard Le Mesurier, مصدر

كلاً من الطرود والتسلسل هما طريقتان لتنظيم البيانات وتجاوزها. في android يتم استخدام هذا لتمرير أنواع البيانات غير الأولية بين المكونات والعمليات. بشكل عام ، يتيح Android إما كائنات قابلة للتسلسل أو قابلة للتجزئة ، بحيث يمكنك اختيار طريقتك. الاستثناء لذلك هو مع واجهات AIDL. يجب أن تكون الأشياء قابلة للعكس لكي يتم تمريرها/إعادتها.

التسلسل يستخدم انعكاس marshall تلقائيًا و unmarshal البيانات. في معظم الحالات ، يكون تنفيذ واجهة العلامة كافياً لجعلها تعمل فقط. مع الطرود ، يجب عليك كتابة التعليمات البرمجية إلى marshall و unmarshal البيانات بنفسك.

وبالتالي ، هذا هو السبب في أن التوسيع أسرع. لا يحتاج الكائن أن ينعكس لاكتشاف الحقول. إنه الانعكاس الذي يجعلها بطيئة.

يحتوي التسلسل أيضًا على إصدار مضمن في الإصدارات ... إذا حاولت unmarshal إلى إصدار مختلف لفئة الكائن التي تم تنظيمها ، ستفشل العملية بطريقة يمكن التنبؤ بها. مع الطرود ، يمكنك القيام بنفس الشيء ولكنك تحتاج إلى تنفيذه بنفسك عن طريق إضافة "حقل الإصدار إلى الكائن الخاص بك ، والكود الذي يتحقق من إصدار عند unmarhsaling.

أن يقال ، أنا عادة استخدام التسلسل. مع كائنات بسيطة لن تلاحظ الفرق. يمكنك دائمًا التغيير لاستخدام التعليمة لاحقًا في التطوير إذا اكتشفت مشكلات في الأداء.

2
وأضاف
Android Sudan Community
Android Sudan Community
900 مشارك

كل اقتراحاتكم تتم مشاركتها هنا رابط القناة لتنزيل البرامج والالعاب من هنا @android_sudan تنبيه : القروب غير مختص إطلاقا بي الانترنت المجاني مثل ملفات الحاقن وماشابه يمنع منعا باتا نشر اي ملفات او برامج او اي شيء يتعلق بالانترنت المجان