واجهات برمجة تطبيقات Android 4.2

مستوى واجهة برمجة التطبيقات: 17

الإصدار 4.2 من نظام التشغيل Android (JELLY_BEAN_MR1) هو تحديث لإصدار Jelly Bean يقدّم ميزات جديدة للمستخدمين ومطوري التطبيقات. يقدم هذا المستند مقدمة لأهم واجهات برمجة التطبيقات الجديدة والأكثر فائدة للمطورين.

بصفتك مطوِّر تطبيقات، عليك تنزيل النظام الأساسي لحزمة تطوير البرامج (SDK) ونسخة نظام التشغيل Android 4.2 من أداة تطوير البرامج (SDK) في أقرب وقت ممكن. إذا لم يكن لديك جهاز يعمل بالإصدار 4.2 من نظام التشغيل Android لاختبار تطبيقك، فاستخدم صورة نظام Android 4.2 لاختبار تطبيقك على محاكي Android. ثم أنشئ تطبيقاتك وفق نظام Android 4.2 الأساسي لبدء استخدام أحدث واجهات برمجة التطبيقات.

لتحسين أداء تطبيقك على الأجهزة التي تعمل بالإصدار 4.2 من نظام التشغيل Android، عليك ضبط العلامة targetSdkVersion على "17"، وتثبيتها على إحدى صور النظام التي تعمل بالإصدار 4.2 من نظام التشغيل Android، واختبارها، ثم نشر تحديث يتضمّن هذا التغيير.

يمكنك استخدام واجهات برمجة التطبيقات في Android 4.2 مع إتاحة الإصدارات القديمة أيضًا من خلال إضافة شروط إلى الرمز البرمجي للتحقّق من مستوى واجهة برمجة تطبيقات النظام قبل تنفيذ واجهات برمجة التطبيقات غير المتوافقة مع minSdkVersion. لمعرفة المزيد حول الحفاظ على التوافق مع الأنظمة القديمة، يُرجى قراءة إنشاء واجهات مستخدم متوافقة مع الأنظمة القديمة.

تتوفّر مزيد من المعلومات حول طريقة عمل مستويات واجهة برمجة التطبيقات في القسم ما هو مستوى واجهة برمجة التطبيقات؟

تغييرات مهمة في السلوك

إذا سبق لك نشر تطبيق لنظام التشغيل Android، يُرجى الانتباه إلى التغييرات التالية التي قد تؤثر في سلوك تطبيقك:

  • لم يعد يتم تصدير موفّري المحتوى تلقائيًا. وهذا يعني أنّ القيمة التلقائية للسمة android:exported هي الآن “false". إذا كان من المهم أن تتمكن التطبيقات الأخرى من الوصول إلى موفّر المحتوى، عليك الآن إعداد android:exported="true" بشكل واضح.

    لا يسري هذا التغيير إلا في حال ضبط android:targetSdkVersion أو android:minSdkVersion على 17 أو أعلى. بخلاف ذلك، تظل القيمة التلقائية “true" حتى عند تشغيل الإصدار 4.2 من نظام التشغيل Android والإصدارات الأحدث.

  • بالمقارنة مع الإصدارات السابقة من Android، قد تكون نتائج الموقع الجغرافي للمستخدم أقل دقة إذا طلب تطبيقك إذن ACCESS_COARSE_LOCATION ولكنه لا يطلب إذن ACCESS_FINE_LOCATION.

    لتلبية توقعات المستخدمين بشأن الخصوصية عندما يطلب تطبيقك إذنًا للوصول إلى الموقع الجغرافي التقريبي (وليس الموقع الجغرافي الدقيق)، لن يوفّر النظام تقديرًا للموقع الجغرافي للمستخدمين أكثر دقة من موقع جغرافي في مدينة.

  • بعض إعدادات الجهاز التي تم تحديدها من خلال Settings.System أصبحت الآن للقراءة فقط. وإذا حاول تطبيقك كتابة تغييرات على الإعدادات المحدّدة في Settings.System والتي تم نقلها إلى Settings.Global، لن يتم إجراء عملية الكتابة بدون تنبيه عند التشغيل على Android 4.2 والإصدارات الأحدث.

    حتى إذا كانت قيمتك لـ android:targetSdkVersion وandroid:minSdkVersion أقل من 17، لا يمكن لتطبيقك تعديل الإعدادات التي تم نقلها إلى Settings.Global عند التشغيل على نظام التشغيل Android 4.2 والإصدارات الأحدث.

  • إذا كان تطبيقك يستخدم WebView، سيضيف Android 4.2 طبقة إضافية من الأمان لتتمكن من ربط JavaScript برمز Android بشكل أكثر أمانًا. إذا ضبطت targetSdkVersion على 17 أو أعلى، عليك الآن إضافة التعليق التوضيحي @JavascriptInterface إلى أي طريقة تريدها أن تكون متاحة لـ JavaScript (يجب أن تكون الطريقة علنية أيضًا). في حال عدم تقديم التعليق التوضيحي، لن تتمكّن إحدى صفحات الويب في WebView من الوصول إلى الطريقة عند استخدام الإصدار 4.2 من نظام التشغيل Android أو الإصدارات الأحدث. في حال ضبط السمة targetSdkVersion على 16 أو أقل، لن يكون التعليق التوضيحي مطلوبًا، ولكننا ننصحك بتعديل الإصدار المستهدَف وإضافة التعليق التوضيحي لمزيد من الأمان.

    يمكنك الاطّلاع على مزيد من المعلومات حول ربط رمز JavaScript برمز Android.

Daydream

Daydream هو وضع شاشة استراحة تفاعلي جديد لأجهزة Android. ويتم تنشيط هذه الميزة تلقائيًا عند إدخال الجهاز في قاعدة الإرساء أو عند تركه في وضع عدم النشاط أثناء توصيله بالشاحن (بدلاً من إطفاء الشاشة). تعرض أحلام اليقظة حلمًا واحدًا في كل مرة، والذي قد يكون شاشة عرض مرئية بحتة ولا يتم تشغيلها عند اللمس أو قد تكون تفاعلية وسريعة الاستجابة للمجموعة الكاملة من أحداث الإدخال. يتم تنفيذ أحلامك أثناء إنشاء التطبيق وهي تتيح لك الوصول الكامل إلى مجموعة أدوات واجهة المستخدم من Android، بما في ذلك طرق العرض والتنسيقات والصور المتحركة، وبذلك أصبحت أكثر مرونة وفعالية من الخلفيات المتحركة أو تطبيقات التطبيقات المصغّرة.

يمكنك تحقيق حلم Daydream من خلال تنفيذ فئة فرعية من DreamService. تم تصميم واجهات برمجة التطبيقات DreamService لتكون مشابهة لتلك الخاصة بـ Activity. لتحديد واجهة المستخدم التي تحلم بها، مرِّر معرّف مورد التنسيق أو View إلى setContentView() في أي وقت بعد أن تظهر نافذة، مثل معاودة الاتصال في onAttachedToWindow().

توفر الفئة DreamService طُرقًا مهمة أخرى لمعاودة الاتصال في مراحل النشاط بالإضافة إلى واجهات برمجة تطبيقات Service الأساسية، مثل onDreamingStarted() وonDreamingStopped() وonDetachedFromWindow(). لا يمكنك بدء DreamService من تطبيقك، حيث يتم تشغيله تلقائيًا من قِبل النظام.

إذا كان حلمك تفاعليًا، يمكنك بدء نشاط من الحلم لإرسال المستخدم إلى واجهة المستخدم الكاملة لتطبيقك للحصول على مزيد من التفاصيل أو التحكم. يمكنك استخدام finish() لإنهاء وضع السكون حتى يتمكّن المستخدم من رؤية النشاط الجديد.

لإتاحة حلم اليقظة للنظام، عليك الإعلان عن DreamService باستخدام عنصر <service> في ملف البيان. وعليك بعد ذلك تضمين فلتر أهداف مع الإجراء "android.service.dreams.DreamService". مثلاً:

<service android:name=".MyDream" android:exported="true"
    android:icon="@drawable/dream_icon" android:label="@string/dream_label" >
    <intent-filter>
        <action android:name="android.service.dreams.DreamService" />
        <category android:name="android.intent.category.DEFAULT" />
    </intent-filter>
</service>

ثمة طرق أخرى مفيدة في DreamService ينبغي معرفتها:

  • ويتحكّم setInteractive(boolean) في ما إذا كان تطبيق الحلم يتلقّى أحداث الإدخال أو يخرج مباشرةً عند إدخال المستخدم. إذا كان الحلم تفاعليًا، يمكن للمستخدم استخدام زر الرجوع أو الشاشة الرئيسية للخروج من الحلم أو يمكنك الاتصال بالرمز finish() لإيقاف الحلم.
  • إذا كنت تريد عرض شاشة غامرة بالكامل، يمكنك النقر على الرقم setFullscreen() لإخفاء شريط الحالة.
  • قبل بدء أحلام اليقظة، تختم الشاشة للإشارة إلى المستخدم عند اقتراب مهلة عدم النشاط. ويتيح لك الاتصال بالرقم setScreenBright(true) ضبط الشاشة على مستوى سطوعها المعتاد بدلاً من ذلك.

لمزيد من المعلومات، اطّلِع على مستندات "DreamService".

الشاشات الثانوية

يسمح Android لتطبيقك الآن بعرض محتوى فريد على شاشات إضافية متصلة بجهاز المستخدم إما عبر اتصال سلكي أو شبكة Wi-Fi. لإنشاء محتوى فريد لعرض ثانوي، يجب توسيع الفئة Presentation وتنفيذ معاودة الاتصال onCreate(). ضمن onCreate()، حدِّد واجهة المستخدم للشاشة الثانوية من خلال طلب setContentView(). كإضافة لفئة Dialog، توفّر الفئة Presentation المنطقة التي يمكن لتطبيقك عرض واجهة مستخدم فريدة فيها على الشاشة الثانوية.

لاكتشاف الشاشات الثانوية التي يمكنك عرض Presentation فيها، استخدِم واجهة برمجة التطبيقات DisplayManager أو MediaRouter. على الرغم من أنّ واجهات برمجة تطبيقات DisplayManager تتيح لك تعداد شاشات العرض المتعدّدة التي قد تكون متصلة في وقت واحد، عليك عادةً استخدام MediaRouter بدلاً من ذلك للوصول سريعًا إلى شاشة العرض التلقائية للنظام الخاصة بالعروض التقديمية.

للحصول على العرض التلقائي للعرض التقديمي، اتصل بالرقم MediaRouter.getSelectedRoute() ومرره إلى ROUTE_TYPE_LIVE_VIDEO. يؤدي ذلك إلى عرض عنصر MediaRouter.RouteInfo يصف المسار المحدّد حاليًا للنظام في عروض الفيديو. إذا لم تكن قيمة MediaRouter.RouteInfo فارغة، يمكنك استدعاء getPresentationDisplay() للحصول على Display التي تمثِّل الشاشة المتصلة.

يمكنك بعد ذلك عرض العرض التقديمي عن طريق تمرير الكائن Display إلى دالة إنشاء لفئة Presentation. سيظهر الآن عرضك التقديمي على الشاشة الثانوية.

لاكتشاف توصيل شاشة جديدة في وقت التشغيل، يمكنك إنشاء مثيل MediaRouter.SimpleCallback يتم فيه تنفيذ طريقة معاودة الاتصال onRoutePresentationDisplayChanged() والتي سيستدعيها النظام عند توصيل عرض عرض تقديمي جديد. بعد ذلك، سجِّل MediaRouter.SimpleCallback من خلال تمريرها إلى MediaRouter.addCallback() مع نوع المسار ROUTE_TYPE_LIVE_VIDEO. عندما تتلقّى مكالمة على الرقم onRoutePresentationDisplayChanged()، ما عليك سوى الاتصال بالرقم MediaRouter.getSelectedRoute() كما هو مذكور أعلاه.

لتحسين واجهة المستخدم في Presentation بشكل أكبر على الشاشات الثانوية، يمكنك تطبيق مظهر مختلف من خلال تحديد سمة android:presentationTheme في <style> التي طبّقتها على تطبيقك أو نشاطك.

ضع في اعتبارك أن الشاشات المتصلة بجهاز المستخدم غالبًا ما يكون لها حجم شاشة أكبر ومن المحتمل أن تكون كثافة شاشة مختلفة. نظرًا لأن خصائص الشاشة قد تختلف، يجب عليك توفير موارد محسنة خصيصًا لمثل هذه الشاشات الأكبر حجمًا. إذا كنت بحاجة إلى طلب موارد إضافية من Presentation، يمكنك الاتصال بـ getContext().getResources() للحصول على العنصر Resources المقابل للشاشة. يوفر هذا الموارد المناسبة من تطبيقك الأنسب لحجم شاشة الشاشة الثانوية وكثافتها.

لمزيد من المعلومات وبعض عيّنات التعليمات البرمجية، راجِع مستندات الفئة Presentation.

التطبيقات المصغّرة لشاشة القفل

يسمح Android الآن للمستخدمين بإضافة تطبيقات مصغّرة إلى شاشة القفل. لإتاحة استخدام التطبيق المصغّر على شاشة القفل، أضِف السمة android:widgetCategory إلى ملف XML الذي يحدّد AppWidgetProviderInfo. تتيح هذه السمة استخدام قيمتَين، هما: home_screen وkeyguard. يتم ضبط السمة تلقائيًا على home_screen ليتمكّن المستخدمون من إضافة تطبيقك المصغّر إلى الشاشة الرئيسية. إذا أردت إتاحة التطبيق المصغّر أيضًا على شاشة القفل، أضِف القيمة keyguard على النحو التالي:

<appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android"
    ...
    android:widgetCategory="keyguard|home_screen">
</appwidget-provider>

عليك أيضًا تحديد تنسيق أولي لأداة تطبيقك عندما تكون على شاشة القفل باستخدام السمة android:initialKeyguardLayout. تعمل هذه الطريقة تمامًا مثل android:initialLayout، لأنّها توفّر تنسيقًا يمكن أن يظهر على الفور إلى أن يتم إعداد التطبيق المصغّر وتصبح قادرًا على تعديل التنسيق.

لمزيد من المعلومات عن إنشاء تطبيقات مصغّرة لشاشة القفل، بما في ذلك تحديد حجم أداة التطبيق بشكل صحيح عند عرضها على شاشة القفل، يمكنك الاطّلاع على دليل التطبيقات المصغّرة.

عدة مستخدمين

يسمح Android الآن بإتاحة عدة مساحات للمستخدمين على الأجهزة القابلة للمشاركة، مثل الأجهزة اللوحية. ويكون لكل مستخدم على الجهاز مجموعة خاصة من الحسابات والتطبيقات وإعدادات النظام والملفات وأي بيانات أخرى مرتبطة بالمستخدم.

بصفتك مطوِّر تطبيقات، ليس عليك اتّخاذ أي إجراء مختلف لكي يعمل تطبيقك بشكل سليم مع مستخدمين متعددين على جهاز واحد. بغض النظر عن عدد المستخدمين الذين قد يتواجدون على الجهاز، تبقى البيانات التي يحفظها تطبيقك لمستخدم معيّن منفصلة عن البيانات التي يحفظها تطبيقك للمستخدمين الآخرين. يتتبع النظام بيانات المستخدمين التي تنتمي إلى عملية المستخدم التي يتم تشغيل تطبيقك فيها، ويوفر للتطبيق إمكانية الوصول إلى بيانات هذا المستخدم فقط ولا يسمح بالوصول إلى بيانات المستخدمين الآخرين.

حفظ البيانات في بيئة متعددة المستخدمين

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

للتأكُّد من أنّ تطبيقك يعمل بشكل صحيح في بيئة تعدد المستخدمين، لا تُشير إلى دليل التطبيق الداخلي أو موقع وحدة التخزين الخارجية باستخدام المسارات الثابتة، وبدلاً من ذلك استخدِم واجهات برمجة التطبيقات المناسبة دائمًا:

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

تحديد هوية المستخدمين في بيئة متعددة المستخدمين

وإذا أراد تطبيقك تحديد مستخدمين فريدين، مثل جمع الإحصاءات أو إنشاء ارتباطات حسابات أخرى، عليك اتّباع الممارسات المقترَحة لتحديد عمليات التثبيت الفريدة. من خلال إنشاء UUID جديد عند بدء تشغيل تطبيقك للمرة الأولى، يمكنك بالتأكيد الحصول على رقم تعريف فريد لتتبّع كل مستخدم، بغض النظر عن عدد المستخدمين الذين يثبّتون تطبيقك على جهاز واحد. وبدلاً من ذلك، يمكنك حفظ رمز مميز محلي تم جلبه من الخادم أو استخدام معرّف التسجيل الذي توفّره خدمة خدمة المراسلة عبر السحابة الإلكترونية من Google.

يُرجى الانتباه إلى أنّه إذا طلب تطبيقك أحد معرّفات الأجهزة (مثل عنوان MAC لشبكة WiFi أو رقم SERIAL)، سيقدّم التطبيق القيمة نفسها لكل مستخدم، لأنّ هذه المعرّفات مرتبطة بالأجهزة وليس بالمستخدم. بالإضافة إلى المشكلات الأخرى التي تُحدثها هذه المعرّفات كما تمت مناقشتها في مشاركة المدونة تحديد عمليات تثبيت التطبيقات.

إعدادات عامة جديدة

تم تعديل إعدادات النظام لإتاحة إمكانية استخدام مستخدمين متعددين من خلال إضافة Settings.Global. تتشابه مجموعة الإعدادات هذه مع إعدادات Settings.Secure لأنّها متاحة للقراءة فقط، ولكنها تنطبق بشكلٍ شامل على جميع مساحات المستخدمين على الجهاز.

تم نقل العديد من الإعدادات الحالية هنا إما من Settings.System أو Settings.Secure. إذا كان تطبيقك يجري حاليًا تغييرات على الإعدادات المحددة مسبقًا في Settings.System (مثل AIRPLANE_MODE_ON)، من المفترض ألا يعمل هذا الإجراء بعد الآن على جهاز يعمل بالإصدار 4.2 من نظام التشغيل Android أو الإصدارات الأحدث في حال تم نقل هذه الإعدادات إلى Settings.Global. يمكنك مواصلة قراءة الإعدادات في Settings.Global، ولكن بما أنّ الإعدادات لم تعُد آمنة لتغييرها، لن تنجح محاولة تنفيذ ذلك تلقائيًا، وسيُكتب النظام تحذيرًا في سجلّ النظام عند تشغيل التطبيق على الإصدار 4.2 من نظام التشغيل Android أو الإصدارات الأحدث.

إتاحة تنسيق من اليمين إلى اليسار

يوفّر Android الآن العديد من واجهات برمجة التطبيقات التي تتيح لك إنشاء واجهات مستخدم تتيح تحويل اتجاه التنسيق على نحو سلس إلى دعم اللغات التي تستخدم واجهات المستخدم من اليمين إلى اليسار واتجاه القراءة، مثل العربية والعبرية.

لبدء إتاحة تنسيقات RTL في تطبيقك، عليك ضبط السمة android:supportsRtl على العنصر <application> في ملف البيان وضبطها على “true". بعد تفعيل هذه الميزة، سيتمكّن النظام من تفعيل العديد من واجهات برمجة التطبيقات التي تستخدم التنسيق RTL، وذلك لعرض تطبيقك بتنسيقات RTL. على سبيل المثال، سيعرض شريط الإجراءات الرمز والعنوان على الجانب الأيمن وأزرار الإجراءات على اليمين، وسيتم أيضًا عكس أي تصاميم أنشأتها باستخدام فئات View المقدّمة في إطار العمل.

إذا كنت بحاجة إلى تحسين مظهر تطبيقك عند عرضه بتنسيق RTL، فهناك مستويان أساسيان للتحسين:

  1. يمكنك تحويل خصائص التنسيق بالاتجاهَين الأيسر والأيمن إلى خصائص تنسيق البداية والنهاية الموجهة.

    على سبيل المثال، يمكنك استخدام android:layout_marginStart بدلاً من android:layout_marginLeft وandroid:layout_marginEnd بدلاً من android:layout_marginRight.

    توفّر الفئة RelativeLayout أيضًا سمات التنسيق المقابلة لاستبدال المواضع اليمنى/اليسرى، مثل android:layout_alignParentStart لاستبدال android:layout_alignParentLeft وandroid:layout_toStartOf بدلاً من android:layout_toLeftOf.

  2. أو لتوفير تحسين كامل لتنسيقات RTL، يمكنك توفير ملفات تنسيق منفصلة تمامًا باستخدام مؤهِّل مورد ldrtl (وهو اختصار لعبارة ldrtl layout-direction-right-to-left}). على سبيل المثال، يمكنك حفظ ملفات التنسيق التلقائية في res/layout/ وتنسيقات RTL المحسّنة في res/layout-ldrtl/.

    يُعدّ مؤهِّل ldrtl مثاليًا للموارد القابلة للرسم، بحيث يمكنك توفير رسومات موجهة في الاتجاه المقابل لاتجاه القراءة.

تتوفر العديد من واجهات برمجة التطبيقات الأخرى في إطار العمل لإتاحة تنسيقات RTL، كما هو الحال في الفئة View بحيث يمكنك تنفيذ السلوكيات المناسبة لطرق العرض المخصّصة وفي Configuration للاستعلام عن اتجاه التنسيق الحالي.

ملاحظة: إذا كنت تستخدم SQlite ولديك جداول أو أسماء أعمدة تستخدم "أرقام فقط"، يُرجى توخّي الحذر لأنّ استخدام String.format(String, Object...) قد يؤدي إلى حدوث أخطاء حيث يتم تحويل الأرقام إلى مكافئاتها باللغة العربية في حال ضبط جهازك على اللغة العربية. يجب استخدام String.format(Locale,String,Object...) لضمان الاحتفاظ بالأرقام بتنسيق ASCII. استخدِم أيضًا String.format("%d", int) بدلاً من استخدام String.valueOf(int) لتنسيق الأرقام.

أجزاء متداخلة

يمكنك الآن تضمين الأجزاء داخل الأجزاء. وهذا مفيد لمجموعة متنوعة من المواقف التي تريد فيها وضع مكونات واجهة المستخدم الديناميكية والقابلة لإعادة الاستخدام في مكون واجهة المستخدم الذي يكون في حد ذاته ديناميكيًا وقابلاً لإعادة الاستخدام. على سبيل المثال، إذا كنت تستخدم ViewPager لإنشاء أجزاء تمرِّر سريعًا لليسار واليمين وتستهلك معظم مساحة الشاشة، يمكنك الآن إدراج الأجزاء في كل صفحة مجزأة.

لدمج جزء، ما عليك سوى استدعاء getChildFragmentManager() على Fragment الذي تريد إضافة كسر فيه. يؤدي هذا الإجراء إلى عرض FragmentManager التي يمكنك استخدامها كما تفعل عادةً من نشاط المستوى الأعلى لإنشاء معاملات مجزّأة. على سبيل المثال، إليك بعض الرموز التي تضيف فاصلاً من داخل فئة Fragment حالية:

Kotlin

val videoFragment = VideoPlayerFragment()
childFragmentManager.beginTransaction().apply {
    add(R.id.video_fragment, videoFragment)
    commit()
}

Java

Fragment videoFragment = new VideoPlayerFragment();
FragmentTransaction transaction = getChildFragmentManager().beginTransaction();
transaction.add(R.id.video_fragment, videoFragment).commit();

من داخل أي جزء مدمَج، يمكنك الحصول على مرجع إلى ذلك الجزء الرئيسي من خلال طلب الرمز getParentFragment().

تتوافق مكتبة دعم Android الآن أيضًا مع الأجزاء المدمَجة، ما يتيح لك تنفيذ تصميمات مدمَجة للأجزاء على نظام التشغيل Android 1.6 والإصدارات الأحدث.

ملاحظة: لا يمكنك تضخيم تنسيق إلى جزء إذا كان هذا التنسيق يتضمّن <fragment>. لا تكون الأجزاء المتداخلة متوافقة إلا عند إضافتها إلى جزء ديناميكيًا.

نص Renderscript

تم تحسين وظيفة احتساب Renderscript بالميزات التالية:

الأساسيات في النص البرمجي

يمكنك استخدام العناصر الأساسية للنصوص البرمجية المضمّنة في Renderscript والتي تنفّذ عمليات شائعة نيابةً عنك، مثل:

لاستخدام نص برمجي أساسي، عليك استدعاء طريقة create() الثابتة لكل نص أساسي لإنشاء مثيل من النص البرمجي. يمكنك بعد ذلك استدعاء طرق set() المتاحة لكل سمة نص برمجي أساسية لضبط أي إدخالات وخيارات ضرورية. وأخيرًا، يمكنك استدعاء الطريقة forEach() لتنفيذ النص البرمجي.

مجموعات النصوص البرمجية

تتيح لك ScriptGroup بتجميع نصوص Renderscript ذات الصلة معًا وتنفيذها باستخدام استدعاء واحد.

استخدِم ScriptGroup.Builder لإضافة جميع النصوص البرمجية إلى المجموعة من خلال طلب addKernel(). بعد إضافة جميع النصوص، أنشِئ الروابط بين النصوص من خلال طلب addConnection(). عند الانتهاء من إضافة الاتصالات، يمكنك استدعاء create() لإنشاء مجموعة النصوص البرمجية. قبل تنفيذ مجموعة النصوص البرمجية، حدِّد الإدخال Allocation والنص البرمجي الأولي لتشغيله باستخدام الأسلوب setInput(Script.KernelID, Allocation) وقدِّم الناتج Allocation الذي ستتم كتابة النتيجة إليه والنص البرمجي النهائي الذي سيتم تنفيذه باستخدام setOutput(). وأخيرًا، يمكنك استدعاء الدالة execute() لتشغيل مجموعة النصوص البرمجية.

Filterscript

تحدّد Filterscript القيود المفروضة على واجهات برمجة تطبيقات Renderscript الحالية التي تسمح بتشغيل الرمز البرمجي الناتج على مجموعة متنوعة من المعالجات (وحدات المعالجة المركزية (CPU) ووحدة معالجة الرسومات (DSP)). لإنشاء ملفات Filterscript، أنشئ ملفات .fs بدلاً من ملفات .rs، وحدد #pragma rs_fp_relaxed لإخبار وقت تشغيل Renderscript بأنّ نصوصك البرمجية لا تتطلب دقة صارمة للنقطة العائمة 754-2008 من معيار IEEE 754-2008. وتتيح هذه الدقة التقريب إلى الصفر مع مستويات التباين والتقريب إلى الصفر. بالإضافة إلى ذلك، يجب ألا تستخدم نصوص filterscript أنواعًا مضمَّنة 32 بت، ويجب أن تحدّد دالة جذر مخصّصة باستخدام السمة __attribute__((kernel)) لأنّ filterscript لا يتيح استخدام المؤشرات، التي يحدّدها التوقيع التلقائي للدالة root().

ملاحظة: على الرغم من توفُّر الفلاتر في النظام الأساسي، سيتوفّر الدعم للمطوّرين في الإصدار 21.0.1 من أدوات SDK.

للحصول على عرض تفصيلي لجميع التغييرات في واجهة برمجة التطبيقات في Android 4.2، يمكنك الاطّلاع على تقرير اختلافات واجهة برمجة التطبيقات.