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

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

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

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

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

يمكنك استخدام واجهات برمجة التطبيقات في نظام التشغيل 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، لن يتم تنفيذ عملية الكتابة تلقائيًا عند تشغيله على الإصدار 4.2 من نظام التشغيل Android والإصدارات الأحدث.

    حتى إذا كانت قيمة 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

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

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

  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 تنسيق اتجاه اتجاه اليمين إلى اليسار}). على سبيل المثال، يمكنك حفظ ملفات التنسيق التلقائية في res/layout/ وتنسيقاتك المحسّنة من اليمين إلى اليسار في 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 والتي تنفّذ عمليات شائعة لك، مثل:

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

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

تسمح لك ScriptGroups بتجميع نصوص 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().

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

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