يقدم هذا المستند نظرة عامة شاملة على Parceler، وهي مكتبة لإنشاء التعليمات البرمجية لنظام Android تعمل على تبسيط إنشاء كائنات Parcelable. وهو يعرض تفاصيل ميزات Parceler، بما في ذلك أنواع البيانات المدعومة، وتقنيات التسلسل، والتعامل مع تعدد الأشكال، والتكوينات المتقدمة، إلى جانب التكامل مع مكتبات Android الشائعة الأخرى. يقدم الجزء الأخير Mitsuba 3، وهو نظام عرض موجه للبحث، ويحدد ميزاته وتثبيته واستخدامه.
بارسلر
هل لديك سؤال؟ اسأله على StackOverflow.
هل وجدت مشكلة؟ يرجى الإبلاغ عن ذلك.
في Android، تعد Parcelables طريقة رائعة لإجراء تسلسل لكائنات Java بين السياقات.
بالمقارنة مع التسلسل التقليدي، تستغرق الطرود وقتًا أقل بمقدار 10 مرات لإجراء التسلسل وإلغاء التسلسل.
ومع ذلك، هناك عيب كبير في Parcelables.
تحتوي الطرود على الكثير من التعليمات البرمجية النموذجية.
لتنفيذ Parcelable، يجب أن تعكس أساليب writeToParcel() و createFromParcel() بحيث تقرأ وتكتب إلى الطرود بنفس الترتيب.
أيضًا، يجب أن يحدد Parcelable نهائيًا ثابتًا عامًا Parcelable.Creator CREATOR حتى تتمكن البنية التحتية لنظام Android من الاستفادة من رمز التسلسل.
Parceler هي مكتبة لإنشاء الأكواد البرمجية تقوم بإنشاء كود مصدر Android Parcelable المعياري.
لم يعد يتعين عليك تنفيذ واجهة Parcelable، أو writeToParcel() أو createFromParcel() أو CREATOR النهائي الثابت العام.
ما عليك سوى إضافة تعليق توضيحي إلى POJO باستخدام @Parcel وسيقوم Parceler بالباقي.
نظرًا لأن Parceler يستخدم معالج التعليقات التوضيحية Java JSR-269، ليست هناك حاجة لتشغيل أداة يدويًا لإنشاء رمز Parcelable.
ما عليك سوى إضافة تعليق توضيحي إلى Java Bean الخاص بك، وتجميعه، وبذلك تكون قد انتهيت.
افتراضيًا، سيقوم Parceler بإجراء تسلسل لحقول المثيل الخاص بك مباشرةً:
احرص على عدم استخدام الحقول الخاصة عند استخدام استراتيجية تسلسل الحقول الافتراضية لأنها ستؤدي إلى فرض عقوبة على الأداء بسبب الانعكاس.
لاستخدام الكود الذي تم إنشاؤه، يمكنك الرجوع إلى الفئة التي تم إنشاؤها مباشرة، أو عبر فئة الأداة المساعدة Parcels:
لإلغاء الإشارة إلى @Parcel، ما عليك سوى استدعاء الأسلوب Parcels.unwrap() :
بالطبع، يمكن إضافة Parcelable المغلف إلى Android Bundle للنقل من نشاط إلى آخر:
وتم إلغاء الإشارة إليه في طريقة onCreate ():
تعمل تقنية الالتفاف وإلغاء التغليف هذه بشكل جيد مع نمط Intent Factory.
بالإضافة إلى ذلك، يتم دعم Parceler بواسطة المكتبات التالية:
Transfuse - يسمح باستخدام الفاصوليا المشروحة @Parcel مع الحقنة @Extra.
FragmentArgs - يستخدم محول ParcelerArgsBundler لالتفاف وإلغاء تغليف الفاصوليا المشروحة @Parcel بمعلمات الجزء.
Dart - يكتشف تلقائيًا الحبوب المشروحة بواسطة @Parcel ويزيل تغليفها تلقائيًا عند استخدام @InjectExtra.
AndroidAnnotations - يكتشف تلقائيًا الفاصوليا ذات التعليقات التوضيحية @Parcel ويقوم بتغليفها/إلغاء تغليفها تلقائيًا عند استخدام @Extra و@FragmentArg و@InstanceState والتعليقات التوضيحية الأخرى ذات الصلة بالحزمة.
ActivityStarter - يدعم كائنات Parceler أصلاً كوسائط للأنشطة والأجزاء والخدمات وما إلى ذلك.
Remoter - يدعم كائنات Parceler أصلاً كوسائط في واجهاتRemoter.
أنواع سمات الطرود
يمكن استخدام عدد محدد فقط من الأنواع كسمات لفئة @Parcel.
تتضمن القائمة التالية الأنواع المعينة:
بايت
مزدوج
يطفو
كثافة العمليات
طويل
شار
منطقية
خيط
IBinder
باقة
SparseArray لأي من الأنواع المعينة*
SparseBooleanArray
ObservableField
القائمة وArrayList وLinkedList لأي من الأنواع المعينة*
Map وHashMap وLinkedHashMap وSortedMap وTreeMap لأي من الأنواع المعينة*
Set وHashSet وSortedSet وTreeSet وLinkedHashSet لأي من الأنواع المعينة*
لا يتجزأ
قابل للتسلسل
صفيف من أي من الأنواع المعينة
أي فئة أخرى تم تعليقها باستخدام @Parcel
*سيحدث خطأ في الطرد إذا لم يتم تعيين المعلمة العامة.
يدعم Parceler أيضًا أيًا من الأنواع المذكورة أعلاه مباشرةً.
يعد هذا مفيدًا بشكل خاص عند التعامل مع مجموعات من الفئات الموضحة بـ @Parcel:
تعدد الأشكال
لاحظ أن Parceler لا يقوم بإلغاء تغليف التسلسلات الهرمية للوراثة، لذلك سيتم إلغاء تغليف أي حقول متعددة الأشكال كمثيلات للفئة الأساسية.
وذلك لأن Parceler يختار الأداء بدلاً من التحقق من .getClass() لكل جزء من البيانات.
راجع قسم التسلسل المخصص للحصول على مثال للعمل مع الحقول متعددة الأشكال.
تقنيات التسلسل
يقدم Parceler عدة خيارات لكيفية إجراء تسلسل وإلغاء تسلسل كائن بالإضافة إلى التسلسل الميداني الموضح أعلاه.
تسلسل Getter/setter
قد يتم تكوين Parceler لإجراء تسلسل باستخدام أساليب getter وsetter ومنشئ غير فارغ.
بالإضافة إلى ذلك، قد يتم ربط الحقول والأساليب ومعلمات المُنشئ باستخدام التعليق التوضيحي @ParcelProperty.
وهذا يدعم عددًا من استراتيجيات الفاصوليا بما في ذلك الثبات والفاصوليا التقليدية.
لتكوين تسلسل الطريقة الافتراضية، ما عليك سوى تكوين التعليق التوضيحي @Parcel باستخدام Serialization.BEAN:
لاستخدام مُنشئ مع التسلسل، قم بتعليق المُنشئ المطلوب باستخدام التعليق التوضيحي @ParcelConstructor:
في حالة وجود مُنشئ فارغ، سيستخدم Parceler هذا المُنشئ ما لم يتم إضافة مُنشئ آخر.
خلط الحروف/المستوطنين والحقول
يمكنك أيضًا مزج تقنيات التسلسل ومطابقتها باستخدام التعليق التوضيحي @ParcelProperty.
في المثال التالي، تتم كتابة الاسم الأول واسم العائلة على الحبة باستخدام المُنشئ بينما تتم قراءة الاسم الأول من الحبة باستخدام الحقل ويتم قراءة اسم العائلة باستخدام طريقة getLastName().
يتم تنسيق معلمات الاسم الأول واسم العائلة بواسطة أسماء المعلمات "الأول" و"الأخير" بشكل محترم.
بالنسبة للسمات التي لا ينبغي إجراء تسلسل لها باستخدام Parceler، قد تتم إضافة تعليقات توضيحية إلى حقل السمة أو getter أو setter بواسطة @Transient.
يدعم Parceler العديد من الأنماط المختلفة التي تتمحور حول POJO.
يسمح هذا باستخدام فئات @Parcel المشروحة مع المكتبات الأخرى المستندة إلى POJO، بما في ذلك ما يلي:
جيسون
عالم
خزانة
XML بسيط
DBFlow
دعم المصنع الثابت
كبديل لاستخدام المُنشئ مباشرةً، يدعم Parceler استخدام Static Factory المشروح لإنشاء مثيل للفئة المحددة.
يدعم هذا النمط معالج التعليقات التوضيحية AutoValue من Google/مكتبة إنشاء التعليمات البرمجية لإنشاء وحدات غير قابلة للتغيير.
واجهات Parceler مع AutoValue عبر التعليق التوضيحي @ParcelFactory، الذي يعين طريقة مصنع ثابتة في تسلسل @Parcel المشروح:
يقوم AutoValue بإنشاء فئة مختلفة عن @Parcel المشروح، لذلك، تحتاج إلى تحديد الفئة التي يجب أن ينشئها Parceler في فئة الأداة المساعدة Parcels:
ولإلغاء التسلسل:
التسلسل المخصص
يتضمن @Parcel معلمة اختيارية لتضمين مُسلسل يدوي ParcelConverter للحالة التي يكون فيها التسلسل الخاص ضروريًا.
يوفر هذا خيارًا أنظف لاستخدام فئات Parcelable بدلاً من تنفيذها يدويًا.
يوضح التعليمة البرمجية التالية استخدام ParcelConverter لإلغاء التسلسل الهرمي للميراث أثناء إلغاء التسلسل.
يتم أيضًا حزم Parceler مع سلسلة من الفئات الأساسية لتسهيل تحويل المجموعة الموجودة ضمن حزمة org.parceler.converter الخاصة بواجهة برمجة التطبيقات.
تعتني هذه الفئات الأساسية بمجموعة متنوعة من المهام الصعبة أو المطولة التي تتعامل مع المجموعات بما في ذلك عمليات التحقق من القيمة الفارغة وتكرار التجميع.
على سبيل المثال، يمكن كتابة ParcelConverter أعلاه باستخدام ArrayListParcelConverter:
فئات بدون مصدر جافا
بالنسبة للفئات التي لا يتوفر مصدر Java المقابل لها، يمكن للمرء تضمين الفئة كقطعة باستخدام التعليق التوضيحي @ParcelClass.
قد يتم الإعلان عن هذا التعليق التوضيحي في أي مكان مناسب في المصدر المترجم.
على سبيل المثال، يمكن للمرء تضمين @ParcelClass مع تطبيق Android:
يمكن الإعلان عن تعليقات توضيحية @ParcelClass متعددة باستخدام التعليق التوضيحي @ParcelClasses.
بالإضافة إلى ذلك، يمكن تكوين الفئات المشار إليها بواسطة @ParcelClass باستخدام التعليق التوضيحي @Parcel.
يسمح هذا بتكوين التسلسل من خلال أي معلمة متاحة في التعليق التوضيحي @Parcel بما في ذلك تقنية التسلسل أو الفئات المراد تحليلها.
إحدى التقنيات المفيدة هي القدرة على تحديد المحولات المخصصة العامة لنوع ما:
وهذا يسمح بالتحكم الدقيق في فئة غير متاحة للتعديل المباشر.
التكوين المتقدم
تخطي التحليل
من الممارسات الشائعة لبعض المكتبات أن تطلب حبة لتوسيع فئة أساسية.
على الرغم من أنها ليست الحالة الأمثل، إلا أن Parceler يدعم هذه الممارسة من خلال السماح بتكوين الفئات الموجودة في التسلسل الهرمي للميراث لتحليلها عبر معلمة التحليل:
في هذا المثال، سيتم إجراء تسلسل فقط لحقول الفئتين One وThree، مع تجنب معلمات الفئتين BaseClass وTwo.
تغليف محدد
تبحث فئة الأداة المساعدة Parcels عن الفئة المحددة للالتفاف حسب الفئة.
لأسباب تتعلق بالأداء، يتجاهل هذا الوراثة، سواء الفئات الفائقة أو الأساسية.
هناك حلان لهذه المشكلة.
أولاً، يمكن تحديد أنواع إضافية لربطها بالنوع المحدد عبر معاملات التنفيذ:
ثانيًا، يمكن أيضًا تحديد نوع الفئة عند استخدام التابع Parcels.wrap() :
تكوين Proguard
لتكوين Proguard، قم بإضافة الأسطر التالية إلى ملف تكوين Proguard الخاص بك. سيحتفظ هذا بالملفات المتعلقة بفئة الأداة المساعدة Parcels ومثيل Parcelable CREATOR:
إيه
الحصول على الطرود
يمكنك تنزيل Parceler باعتباره تابعًا لـ Maven:
أو جرادل:
أو من مافن سنترال.
رخصة
مثال:
ميتسوبا ريندر 3
التوثيق | أشرطة الفيديو التعليمية | لينكس | ماك | ويندوز | بايبي |
---|---|---|---|---|---|
️
تحذير
️
يوجد حاليًا قدر كبير من العمل غير الموثق وغير المستقر الجاري
الفرع master
. نحن نوصي بشدة باستخدام موقعنا
أحدث إصدار
حتى إشعار آخر.
إذا كنت ترغب بالفعل في تجربة التغييرات القادمة، فيرجى إلقاء نظرة عليها
دليل النقل هذا.
وينبغي أن يغطي معظم الميزات الجديدة والتغييرات العاجلة القادمة.
مقدمة
Mitsuba 3 هو نظام عرض موجه نحو البحث للضوء الأمامي والعكسي
تم تطوير محاكاة النقل في EPFL في سويسرا.
وهو يتألف من مكتبة أساسية ومجموعة من المكونات الإضافية التي تنفذ الوظائف
تتراوح من المواد ومصادر الضوء إلى خوارزميات العرض الكاملة.
Mitsuba 3 قابل لإعادة الاستهداف : وهذا يعني أن التطبيقات الأساسية و
يمكن أن تتحول هياكل البيانات لإنجاز مهام مختلفة مختلفة. ل
على سبيل المثال، يمكن لنفس الكود محاكاة نقل RGB العددي (التقليدي لشعاع واحد في كل مرة)
أو النقل الطيفي التفاضلي على GPU. كل هذا مبني على
Dr.Jit، مترجم متخصص في الوقت المناسب (JIT) تم تطويره خصيصًا لهذا المشروع.
الميزات الرئيسية
عبر الأنظمة الأساسية : تم اختبار Mitsuba 3 على Linux ( x86_64
)، وmacOS
( aarch64
و x8664
) و Windows ( x8664
).
الأداء العالي : يقوم برنامج التحويل البرمجي Dr.Jit الأساسي بدمج كود العرض
إلى حبات تحقق أداءً متطورًا باستخدام
واجهة LLVM الخلفية تستهدف وحدة المعالجة المركزية وواجهة CUDA/OptiX الخلفية
استهداف وحدات معالجة الرسومات NVIDIA مع تسريع أجهزة تتبع الأشعة.
Python أولاً : تم دمج Mitsuba 3 بعمق مع Python. مواد،
يمكن تطوير القوام، وحتى خوارزميات العرض الكاملة في بايثون،
الذي يجمعه نظام JIT (ويفرقه اختياريًا) بسرعة.
وهذا يتيح إجراء التجارب اللازمة للبحث في رسومات الحاسوب و
التخصصات الأخرى.
التمايز : ميتسوبا 3 هو عارض قابل للتمييز، مما يعني أنه
يمكن حساب مشتقات المحاكاة بأكملها فيما يتعلق بالمدخلات
المعلمات مثل وضعية الكاميرا، والهندسة، وBSDF، والأنسجة، والأحجام. هو - هي
ينفذ خوارزميات العرض التفاضلية الحديثة التي تم تطويرها في EPFL.
الطيفي والاستقطاب : يمكن استخدام ميتسوبا 3 كجهاز أحادي اللون
العارض أو العارض المستند إلى RGB أو العارض الطيفي. يمكن لكل متغير
حساب اختياريا لآثار الاستقطاب إذا رغبت في ذلك.
أشرطة الفيديو التعليمية والوثائق
لقد سجلنا العديد من مقاطع الفيديو على YouTube التي تقدم مقدمة لطيفة
ميتسوبا 3 ودكتور جيت. علاوة على ذلك، يمكنك العثور على دفاتر ملاحظات Juypter كاملة
تغطي مجموعة متنوعة من التطبيقات والأدلة الإرشادية والوثائق المرجعية
على readthedocs.
تثبيت
نحن نقدم عجلات ثنائية مجمعة مسبقًا عبر PyPI. يعد تثبيت Mitsuba بهذه الطريقة أمرًا بسيطًا مثل التشغيل
نقطة تثبيت ميتسوبا
على سطر الأوامر. تتضمن حزمة Python ثلاثة عشر متغيرًا افتراضيًا:
scalar_rgb
scalar_spectral
scalarspectralpolarized
llvmadrgb
llvmadmono
llvmadmono_polarized
llvmadspectral
llvmadspectral_polarized
cudaadrgb
cudaadmono
cudaadmono_polarized
cudaadspectral
cudaadspectral_polarized
يقوم الأولان بإجراء محاكاة كلاسيكية لشعاع واحد في كل مرة باستخدام إما RGB
أو تمثيل الألوان الطيفية، بينما يمكن استخدام الأخيرين للعكس
العرض على وحدة المعالجة المركزية أو وحدة معالجة الرسومات. للوصول إلى متغيرات إضافية، سوف تحتاج إلى
تجميع نسخة مخصصة من Dr.Jit باستخدام CMake. يرجى الاطلاع على
الوثائق
للحصول على تفاصيل حول هذا.
متطلبات
Python >= 3.8
(اختياري) للحساب على وحدة معالجة الرسومات: Nvidia driver >= 495.89
(اختياري) للحسابات الموجهة/المتوازية على وحدة المعالجة المركزية: LLVM >= 11.1
الاستخدام
فيما يلي مثال بسيط لـ "Hello World" يوضح مدى سهولة تقديم ملف
المشهد باستخدام ميتسوبا 3 من بايثون:
# استيراد المكتبة باستخدام الاسم المستعار "mi"import mitsuba as mi# تعيين متغير renderermi.setvariant('scalarrgb')# تحميل مشهد = mi.loaddict(mi.cornellbox())# Render the sceneimg = mi. render(scene)# اكتب الصورة المقدمة إلى ملف EXRmi.Bitmap(img).write('cbox.exr')
يمكن العثور على البرامج التعليمية ودفاتر الملاحظات النموذجية التي تغطي مجموعة متنوعة من التطبيقات
في الوثائق.
عن
تم إنشاء هذا المشروع بواسطة وينزل جاكوب.
تمت المساهمة في ميزات و/أو تحسينات مهمة على الكود بواسطة
سيباستيان سبيرر,
نيكولا روسيل،
ميرلين نمير ديفيد,
ديليو فيتشيني،
تيزيان زيلتنر،
بابتيست نيكوليه،
ميغيل كريسبو,
فنسنت ليروي، و
زيي تشانغ.
عند استخدام ميتسوبا 3 في المشاريع الأكاديمية، يرجى ذكر ما يلي:
@software{Mitsuba3,title = {Mitsuba 3 renderer},author = {Wenzel Jakob وSébastien Speierer وNicola Roussel وMerlin Nimier-David وDelio Vicini وTizian Zeltner وBaptiste Nicolet وMiguel Crespo وVincent Leroy وZiyi Zhang}، ملاحظة = {https://mitsuba-renderer.org},الإصدار = {3.1.1}، السنة = 2022}