مستوى واجهة برمجة التطبيقات: 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 الآن بمساحات متعددة للمستخدمين على الأجهزة القابلة للمشاركة، مثل الأجهزة اللوحية. ولكل مستخدم على الجهاز مجموعة من الحسابات والتطبيقات وإعدادات النظام والملفات وأي بيانات أخرى مرتبطة بالمستخدم.
بصفتك مطور تطبيقات، ليس عليك اتخاذ أي إجراء مختلف لكي يعمل تطبيقك بشكل سليم مع مستخدمين متعددين على جهاز واحد. بغض النظر عن عدد المستخدمين على الجهاز، يتم فصل البيانات التي يحفظها تطبيقك لمستخدم معين عن البيانات التي يحفظها تطبيقك للمستخدمين الآخرين. يعمل النظام على تتبع بيانات المستخدمين التي تنتمي إلى عملية المستخدم التي يتم تشغيل تطبيقك من خلالها، كما يوفر للتطبيق إمكانية الوصول إلى بيانات هذا المستخدم فقط ولا يسمح بالوصول إلى بيانات المستخدمين الآخرين.
حفظ البيانات في بيئة متعددة المستخدمين
عندما يحفظ تطبيقك الإعدادات المفضّلة للمستخدم أو ينشئ قاعدة بيانات أو يكتب ملفًا في مساحة التخزين الداخلية أو الخارجية للمستخدم، لا يمكن الوصول إلى هذه البيانات إلا أثناء تشغيل هذا المستخدم.
للتأكد من أن تطبيقك يعمل بشكل صحيح في بيئة متعددة المستخدمين، لا تُشير إلى دليل التطبيق الداخلي أو موقع وحدة التخزين الخارجية باستخدام المسارات ذات الترميز الثابت، وبدلاً من ذلك استخدِم واجهات برمجة التطبيقات المناسبة دائمًا:
- للوصول إلى وحدة التخزين الداخلية، استخدِم
getFilesDir()
أوgetCacheDir()
أوopenFileOutput()
. - للوصول إلى وحدة التخزين الخارجية، استخدِم
getExternalFilesDir()
أوgetExternalStoragePublicDirectory()
.
بغض النظر عن واجهات برمجة التطبيقات التي تستخدمها لحفظ البيانات لمستخدم معيّن، لن يكون من الممكن الوصول إلى البيانات أثناء تشغيلها كمستخدم مختلف. من وجهة نظر التطبيق، يعمل كل مستخدم على جهاز منفصل تمامًا.
تحديد هوية المستخدمين في بيئة متعددة المستخدمين
إذا كان تطبيقك يريد تحديد مستخدمين فريدين مثل جمع الإحصاءات أو إنشاء ارتباطات حسابات أخرى، يجب اتّباع الممارسات الموصى بها لتحديد عمليات التثبيت الفريدة. من خلال إنشاء 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
المقدّمة في إطار العمل.
إذا كنت بحاجة إلى إدخال المزيد من التحسينات على مظهر تطبيقك عند عرضه بتنسيق من اليمين إلى اليسار، هناك مستويان أساسيان للتحسين:
- يمكنك تحويل خصائص التنسيق بالاتجاهَين الأيمن والأيسر إلى خصائص تنسيق موجَّهة للبداية والنهاية.
على سبيل المثال، يمكنك استخدام
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
. - أو لتوفير تحسين كامل لتنسيقات 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 والتي تنفّذ عمليات شائعة لك، مثل:
Blends
Blur
Color matrix
3x3 convolve
5x5 convolve
Per-channel lookup table
Converting an Android YUV buffer to RGB
لاستخدام سمة أساسية للنص البرمجي، عليك استدعاء طريقة
create()
الثابتة لكل سمة لإنشاء مثيل للنص البرمجي. بعد ذلك، يمكنك استدعاء طُرقset()
المتاحة لكل سمة أساسية في النص البرمجي لضبط أي إدخالات وخيارات ضرورية. أخيرًا، استدعِ الطريقةforEach()
لتنفيذ النص البرمجي.- مجموعات النصوص البرمجية
-
تسمح لك
ScriptGroup
s بتجميع نصوص 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، يمكنك الاطّلاع على تقرير اختلافات واجهة برمجة التطبيقات.