API های اندروید 4.2

سطح API: 17

Android 4.2 ( JELLY_BEAN_MR1 ) به‌روزرسانی نسخه Jelly Bean است که ویژگی‌های جدیدی را برای کاربران و توسعه‌دهندگان برنامه ارائه می‌کند. این سند مقدمه ای بر قابل توجه ترین و مفیدترین API های جدید برای توسعه دهندگان ارائه می دهد.

به‌عنوان یک توسعه‌دهنده برنامه، باید تصویر سیستم Android 4.2 و پلتفرم SDK را در اسرع وقت از مدیریت SDK دانلود کنید. اگر دستگاهی ندارید که Android 4.2 را روی آن آزمایش کنید، از تصویر سیستم Android 4.2 برای آزمایش برنامه خود در شبیه ساز Android استفاده کنید. سپس برنامه های خود را بر اساس پلتفرم اندروید 4.2 بسازید تا شروع به استفاده از آخرین APIها کنید.

برای بهینه‌سازی بهتر برنامه خود برای دستگاه‌های دارای Android 4.2، باید targetSdkVersion خود را روی "17" تنظیم کنید، آن را روی یک تصویر سیستم Android 4.2 نصب کنید، آن را آزمایش کنید، سپس با این تغییر به‌روزرسانی منتشر کنید.

می‌توانید از APIها در Android 4.2 استفاده کنید و در عین حال از نسخه‌های قدیمی‌تر نیز با افزودن شرایطی به کد خود استفاده کنید که سطح API سیستم را قبل از اجرای APIهایی که توسط minSdkVersion شما پشتیبانی نمی‌شوند بررسی می‌کنند. برای کسب اطلاعات بیشتر در مورد حفظ سازگاری با عقب، ایجاد UI های سازگار با عقب را بخوانید.

اطلاعات بیشتر در مورد نحوه عملکرد سطوح API در سطح API چیست؟

تغییرات مهم رفتاری

اگر قبلاً برنامه‌ای برای Android منتشر کرده‌اید، از تغییرات زیر که ممکن است بر رفتار برنامه شما تأثیر بگذارد آگاه باشید:

  • ارائه دهندگان محتوا دیگر به طور پیش فرض صادر نمی شوند. یعنی، مقدار پیش‌فرض ویژگی android:exported اکنون “false" است. اگر مهم است که برنامه‌های دیگر بتوانند به ارائه‌دهنده محتوای شما دسترسی داشته باشند، اکنون باید به صراحت android:exported="true" را تنظیم کنید.

    این تغییر تنها در صورتی اعمال می‌شود که android:targetSdkVersion یا android:minSdkVersion روی 17 یا بالاتر تنظیم کنید. در غیر این صورت، مقدار پیش‌فرض همچنان “true" است حتی زمانی که در اندروید 4.2 و بالاتر اجرا می‌شود.

  • در مقایسه با نسخه‌های قبلی Android، اگر برنامه شما مجوز ACCESS_COARSE_LOCATION را درخواست کند اما مجوز ACCESS_FINE_LOCATION را درخواست نکند، نتایج مکان کاربر ممکن است کمتر دقیق باشد.

    برای برآورده کردن انتظارات حریم خصوصی کاربران، زمانی که برنامه شما برای موقعیت مکانی نادرست (و نه موقعیت مکانی خوب) مجوز درخواست می کند، سیستم تخمین موقعیت مکانی کاربر را که دقیق تر از بلوک شهر باشد ارائه نمی دهد.

  • برخی از تنظیمات دستگاه تعریف شده توسط Settings.System اکنون فقط خواندنی هستند. اگر برنامه شما بخواهد تغییراتی را در تنظیمات تعریف شده در Settings.System که به Settings.Global منتقل شده اند بنویسد، هنگام اجرا در Android نسخه 4.2 و بالاتر، عملیات نوشتن بی‌صدا با شکست مواجه می‌شود.

    حتی اگر مقدار شما برای android:targetSdkVersion و android:minSdkVersion کمتر از 17 باشد، برنامه شما نمی‌تواند تنظیماتی را که به Settings.Global منتقل شده‌اند را هنگام اجرا در اندروید 4.2 و بالاتر تغییر دهد.

  • اگر برنامه شما از WebView استفاده می کند، Android 4.2 یک لایه امنیتی اضافی اضافه می کند تا بتوانید با خیال راحت تر جاوا اسکریپت را به کد Android خود متصل کنید . اگر targetSdkVersion خود را روی 17 یا بالاتر تنظیم کنید، اکنون باید حاشیه نویسی @JavascriptInterface را به هر روشی که می خواهید در جاوا اسکریپت خود در دسترس باشد اضافه کنید (روش باید عمومی نیز باشد). اگر حاشیه نویسی را ارائه نکنید، وقتی در Android نسخه 4.2 یا بالاتر اجرا می شود، این روش توسط یک صفحه وب در WebView شما قابل دسترسی نیست. اگر targetSdkVersion را روی 16 یا کمتر تنظیم کنید، حاشیه نویسی لازم نیست، اما توصیه می کنیم نسخه هدف خود را به روز کنید و برای امنیت بیشتر، حاشیه نویسی را اضافه کنید.

    درباره اتصال کد جاوا اسکریپت به کد اندروید بیشتر بخوانید.

رویاپردازی

Daydream یک حالت محافظ صفحه نمایش تعاملی جدید برای دستگاه های اندرویدی است. هنگامی که دستگاه در یک داک قرار می گیرد یا هنگامی که دستگاه در حالی که به شارژر وصل است (به جای خاموش کردن صفحه) بیکار رها می شود، به طور خودکار فعال می شود. Daydream هر بار یک رویا را نمایش می‌دهد، که ممکن است یک نمایشگر صرفاً بصری و غیرفعال باشد که با لمس آن را رد می‌کند، یا ممکن است تعاملی باشد و به مجموعه کامل رویدادهای ورودی پاسخ دهد. رویاهای شما در فرآیند برنامه شما اجرا می شوند و به جعبه ابزار UI Android از جمله نماها، طرح بندی ها و انیمیشن ها دسترسی کامل دارند، بنابراین نسبت به تصاویر پس زمینه زنده یا ویجت های برنامه انعطاف پذیرتر و قدرتمندتر هستند.

شما می توانید با پیاده سازی زیر کلاس DreamService یک رویا برای Daydream ایجاد کنید. API های DreamService به گونه ای طراحی شده اند که مشابه API های Activity باشند. برای تعیین UI برای رویای خود، در هر نقطه پس از ایجاد یک پنجره، از جمله از پاسخ به تماس onAttachedToWindow() یک ID منبع طرح یا View به setContentView() ارسال کنید.

کلاس DreamService روش‌های برگشت تماس چرخه حیات مهم دیگری را در بالای APIهای Service پایه ارائه می‌کند، مانند onDreamingStarted() , onDreamingStopped() و onDetachedFromWindow() . شما نمی توانید DreamService از برنامه خود راه اندازی کنید - به طور خودکار توسط سیستم راه اندازی می شود.

اگر رویای شما تعاملی است، می توانید یک فعالیت را از رویا شروع کنید تا کاربر را برای جزئیات بیشتر یا کنترل به رابط کاربری کامل برنامه خود بفرستید. می توانید finish() برای پایان دادن به رویا استفاده کنید تا کاربر بتواند Activity جدید را ببیند.

برای در دسترس قرار دادن daydream خود در سیستم، 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) کنترل می کند که رویا رویدادهای ورودی را دریافت کند یا بلافاصله پس از ورودی کاربر خارج شود. اگر رویا تعاملی باشد، کاربر می‌تواند از دکمه‌های Back یا Home برای خروج از رویا استفاده کند یا می‌توانید finish() برای توقف رویا فراخوانی کنید.
  • اگر می‌خواهید نمایشگری کاملاً فراگیر داشته باشید، می‌توانید setFullscreen() برای مخفی کردن نوار وضعیت فراخوانی کنید.
  • قبل از شروع Daydream، صفحه نمایش تاریک می شود تا به کاربر نشان دهد که زمان بیکاری نزدیک است. فراخوانی setScreenBright(true) به شما این امکان را می دهد که درعوض صفحه نمایش را در روشنایی معمول خود تنظیم کنید.

برای اطلاعات بیشتر، به مستندات DreamService مراجعه کنید.

نمایشگرهای ثانویه

Android اکنون به برنامه شما اجازه می دهد تا محتوای منحصر به فرد را در صفحه های اضافی که از طریق اتصال سیمی یا Wi-Fi به دستگاه کاربر متصل هستند، نمایش دهد. برای ایجاد محتوای منحصربه‌فرد برای یک نمایشگر ثانویه، کلاس Presentation را گسترش داده و callback onCreate() را پیاده‌سازی کنید. در onCreate() ، با فراخوانی setContentView() UI خود را برای نمایشگر ثانویه مشخص کنید. کلاس Presentation به عنوان افزونه‌ای از کلاس Dialog ، منطقه‌ای را ارائه می‌کند که در آن برنامه شما می‌تواند یک رابط کاربری منحصر به فرد را در صفحه نمایش ثانویه نمایش دهد.

برای شناسایی نمایشگرهای ثانویه که می توانید Presentation خود را نشان دهید، از API های DisplayManager یا MediaRouter استفاده کنید. در حالی که API های DisplayManager به شما امکان می دهد چندین نمایشگر را که ممکن است به طور همزمان متصل شوند را برشمارید، معمولاً باید از MediaRouter برای دسترسی سریع به نمایشگر پیش فرض سیستم برای ارائه ها استفاده کنید.

برای دریافت نمایشگر پیش‌فرض برای ارائه خود، MediaRouter.getSelectedRoute() را فراخوانی کنید و ROUTE_TYPE_LIVE_VIDEO را ارسال کنید. این یک شی MediaRouter.RouteInfo را برمی‌گرداند که مسیر انتخابی سیستم را برای ارائه‌های ویدیویی توصیف می‌کند. اگر MediaRouter.RouteInfo تهی نیست، getPresentationDisplay() را فراخوانی کنید تا Display نمایشگر متصل را دریافت کنید.

سپس می توانید با ارسال شی Display به سازنده کلاس Presentation ، ارائه خود را نمایش دهید. اکنون ارائه شما در صفحه نمایش ثانویه ظاهر می شود.

برای تشخیص اتصال صفحه نمایش جدید در زمان اجرا، نمونه ای از MediaRouter.SimpleCallback ایجاد کنید که در آن روش callback onRoutePresentationDisplayChanged() را پیاده سازی می کنید، که سیستم با اتصال نمایشگر ارائه جدید، آن را فراخوانی می کند. سپس MediaRouter.SimpleCallback را با ارسال آن به MediaRouter.addCallback() همراه با نوع مسیر ROUTE_TYPE_LIVE_VIDEO ثبت کنید. هنگامی که با onRoutePresentationDisplayChanged() تماس دریافت می کنید، همانطور که در بالا ذکر شد به سادگی MediaRouter.getSelectedRoute() را فراخوانی کنید.

برای بهینه‌سازی بیشتر رابط کاربری در Presentation خود برای صفحه‌های ثانویه، می‌توانید با مشخص کردن ویژگی android:presentationTheme در <style> که برای برنامه یا فعالیت خود اعمال کرده‌اید، موضوع دیگری را اعمال کنید.

به خاطر داشته باشید که صفحه نمایش های متصل به دستگاه کاربر اغلب اندازه صفحه نمایش بزرگتر و احتمالاً تراکم صفحه متفاوتی دارند. از آنجایی که ویژگی های صفحه ممکن است متفاوت باشد، باید منابعی را تهیه کنید که به طور خاص برای چنین نمایشگرهای بزرگتری بهینه شده باشند. اگر نیاز به درخواست منابع اضافی از Presentation خود دارید، getContext() .getResources() را فراخوانی کنید تا شی Resources مربوط به نمایشگر را دریافت کنید. این منابع مناسب را از برنامه شما فراهم می کند که برای اندازه و تراکم صفحه نمایش ثانویه مناسب است.

برای اطلاعات بیشتر و چند نمونه کد، به مستندات کلاس Presentation مراجعه کنید.

ابزارک های صفحه قفل

اندروید اکنون به کاربران اجازه می دهد ویجت های برنامه را به صفحه قفل اضافه کنند. برای در دسترس قرار دادن ابزارک برنامه خود برای استفاده در صفحه قفل، ویژگی 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 عمل می کند، به این ترتیب که طرحی را ارائه می دهد که می تواند بلافاصله ظاهر شود تا زمانی که ویجت برنامه شما مقداردهی اولیه شود و بتواند طرح بندی را به روز کند.

برای اطلاعات بیشتر در مورد ساخت ویجت‌های برنامه برای صفحه قفل، از جمله اندازه‌گیری مناسب ویجت برنامه در هنگام روی صفحه قفل، به راهنمای ابزارک‌های برنامه مراجعه کنید.

چند کاربر

اندروید اکنون به چندین فضای کاربری در دستگاه های قابل اشتراک گذاری مانند تبلت ها اجازه می دهد. هر کاربر در یک دستگاه دارای مجموعه ای از حساب ها، برنامه ها، تنظیمات سیستم، فایل ها و سایر داده های مرتبط با کاربر است.

به‌عنوان یک توسعه‌دهنده برنامه، برای اینکه برنامه‌تان به درستی با چندین کاربر در یک دستگاه به درستی کار کند، هیچ کار متفاوتی باید انجام دهید. صرف نظر از اینکه چند کاربر ممکن است در یک دستگاه وجود داشته باشد، داده‌هایی که برنامه شما برای یک کاربر خاص ذخیره می‌کند جدا از داده‌هایی که برنامه شما برای سایر کاربران ذخیره می‌کند، نگهداری می‌شود. سیستم پیگیری می‌کند که کدام داده‌های کاربری متعلق به فرآیند کاربری است که برنامه شما در آن اجرا می‌شود و دسترسی برنامه شما را فقط به داده‌های آن کاربر فراهم می‌کند و اجازه دسترسی به داده‌های سایر کاربران را نمی‌دهد.

ذخیره داده ها در یک محیط چند کاربره

هر زمان که برنامه شما تنظیمات برگزیده کاربر را ذخیره می کند، یک پایگاه داده ایجاد می کند، یا فایلی را در فضای ذخیره سازی داخلی یا خارجی کاربر می نویسد، آن داده ها تنها در حین اجرا به عنوان کاربر قابل دسترسی است.

برای اطمینان از اینکه برنامه شما در یک محیط چند کاربره به درستی عمل می کند، با استفاده از مسیرهای رمزگذاری شده به دایرکتوری برنامه داخلی یا مکان ذخیره سازی خارجی خود مراجعه نکنید و در عوض همیشه از API های مناسب استفاده کنید:

مهم نیست که از کدام یک از این API ها برای ذخیره داده های یک کاربر خاص استفاده می کنید، داده ها در حین اجرای به عنوان یک کاربر دیگر قابل دسترسی نخواهند بود. از دیدگاه اپلیکیشن شما، هر کاربر بر روی یک دستگاه کاملا مجزا در حال اجراست.

شناسایی کاربران در یک محیط چند کاربره

اگر برنامه شما می‌خواهد کاربران منحصربه‌فردی مانند جمع‌آوری تجزیه و تحلیل یا ایجاد ارتباط حساب‌های دیگر را شناسایی کند، باید از روش‌های توصیه‌شده برای شناسایی نصب‌های منحصربه‌فرد پیروی کنید. با ایجاد یک UUID جدید هنگامی که برنامه شما برای اولین بار شروع می شود، مطمئناً یک شناسه منحصر به فرد برای ردیابی هر کاربر، صرف نظر از اینکه چند کاربر برنامه شما را روی یک دستگاه نصب می کنند، به دست خواهید آورد. از طرف دیگر، می‌توانید یک رمز محلی را که از سرورتان واکشی شده است ذخیره کنید یا از شناسه ثبت‌های ارائه شده توسط Google Cloud Messaging استفاده کنید.

مراقب باشید که اگر برنامه شما یکی از شناسه‌های دستگاه سخت‌افزاری (مانند آدرس مک WiFi یا شماره SERIAL ) را درخواست کند، برای هر کاربر مقدار یکسانی ارائه می‌کند زیرا این شناسه‌ها به سخت‌افزار و نه کاربر مرتبط هستند. ناگفته نماند مشکلات دیگری که این شناسه‌ها معرفی می‌کنند، همانطور که در پست وبلاگ شناسایی نصب برنامه‌ها مطرح شده است.

تنظیمات جهانی جدید

تنظیمات سیستم برای پشتیبانی از چندین کاربر با افزودن Settings.Global به روز شده است. این مجموعه تنظیمات شبیه Settings.Secure است زیرا فقط خواندنی هستند، اما به صورت سراسری در تمام فضاهای کاربر روی دستگاه اعمال می‌شوند.

چندین تنظیمات موجود از Settings.System یا Settings.Secure به اینجا منتقل شدند. اگر برنامه شما در حال حاضر در تنظیماتی که قبلاً در Settings.System تعریف شده‌اند (مانند AIRPLANE_MODE_ON )، تغییراتی ایجاد می‌کند، باید انتظار داشته باشید که اگر این تنظیمات به Settings.Global منتقل شوند، این کار دیگر روی دستگاهی که Android نسخه 4.2 یا بالاتر دارد کار نخواهد کرد. می‌توانید به خواندن تنظیماتی که در Settings.Global هستند ادامه دهید، اما از آنجایی که تنظیمات دیگر برای تغییر برنامه‌ها ایمن در نظر گرفته نمی‌شوند، تلاش برای انجام این کار بی‌صدا با شکست مواجه می‌شود و هنگام اجرای برنامه‌تان در سیستم، هشداری به گزارش سیستم می‌نویسد. اندروید 4.2 یا بالاتر.

پشتیبانی از طرح RTL

Android اکنون چندین API ارائه می‌کند که به شما امکان می‌دهد رابط‌های کاربری بسازید که جهت‌بندی طرح‌بندی را به زیبایی تغییر می‌دهند تا از زبان‌هایی که از رابط‌های کاربری راست به چپ (RTL) و جهت خواندن استفاده می‌کنند، مانند عربی و عبری، پشتیبانی کند.

برای شروع پشتیبانی از طرح‌بندی‌های RTL در برنامه‌تان، ویژگی android:supportsRtl روی عنصر <application> در فایل مانیفست خود تنظیم کنید و آن را “true" تنظیم کنید. پس از فعال کردن این گزینه، سیستم API‌های مختلف RTL را فعال می‌کند تا برنامه شما را با RTL نمایش دهند. به عنوان مثال، نوار عمل نماد و عنوان را در سمت راست و دکمه های عمل را در سمت چپ نشان می دهد، و هر طرح بندی که با کلاس های View ارائه شده توسط چارچوب ایجاد کرده اید نیز معکوس خواهد شد.

اگر نیاز به بهینه سازی بیشتر ظاهر برنامه خود در هنگام نمایش با طرح RTL دارید، دو سطح اساسی از بهینه سازی وجود دارد:

  1. ویژگی های طرح بندی چپ و راست را به ویژگی های طرح بندی شروع و پایان تبدیل کنید.

    برای مثال، android:layout_marginStart به جای android:layout_marginLeft و android:layout_marginEnd به جای android:layout_marginRight استفاده کنید.

    کلاس RelativeLayout همچنین ویژگی های layout مربوطه را برای جایگزینی موقعیت های چپ/راست فراهم می کند، مانند 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 برای منابع قابل ترسیم عالی است، به طوری که می توانید گرافیک هایی را ارائه دهید که در جهت مربوط به جهت خواندن هستند.

APIهای مختلف دیگری در سراسر چارچوب برای پشتیبانی از طرح‌بندی‌های RTL در دسترس هستند، مانند کلاس View تا بتوانید رفتارهای مناسب را برای نماهای سفارشی و در Configuration پیاده‌سازی کنید تا جهت طرح فعلی را جستجو کنید.

توجه: اگر از SQlite استفاده می‌کنید و نام‌های جداول یا ستون‌هایی دارید که «فقط عدد» هستند، مراقب باشید: استفاده از String.format(String, Object...) می‌تواند منجر به خطاهایی شود که در آن اعداد به معادل‌های عربی خود تبدیل شده‌اند. String.format("%d", int) شما روی زبان عربی تنظیم شده String.format(Locale,String,Object...) String.valueOf(int) برای قالب بندی اعداد.

قطعات تو در تو

اکنون می توانید قطعات را در قطعات جاسازی کنید. این برای موقعیت‌های مختلفی که می‌خواهید اجزای UI پویا و قابل استفاده مجدد را در یک مؤلفه UI قرار دهید که خود پویا و قابل استفاده مجدد است، مفید است. برای مثال، اگر از ViewPager برای ایجاد قطعاتی استفاده می‌کنید که به چپ و راست می‌روند و بیشتر فضای صفحه را اشغال می‌کنند، اکنون می‌توانید قطعات را در هر صفحه قطعه وارد کنید.

برای قرار دادن یک قطعه، به سادگی getChildFragmentManager() را در Fragment که می‌خواهید قطعه‌ای را در آن اضافه کنید، فراخوانی کنید. این یک FragmentManager برمی‌گرداند که می‌توانید مانند معمول از فعالیت سطح بالا برای ایجاد تراکنش‌های قطعه استفاده کنید. به عنوان مثال، در اینجا کدی وجود دارد که یک قطعه را از یک کلاس Fragment موجود اضافه می کند:

کاتلین

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

جاوا

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

از داخل یک قطعه تو در تو، می توانید با فراخوانی getParentFragment() یک مرجع به قطعه والد دریافت کنید.

کتابخانه پشتیبانی Android نیز اکنون از قطعات تودرتو پشتیبانی می کند، بنابراین می توانید طرح های قطعه تو در تو را در اندروید 1.6 و بالاتر پیاده سازی کنید.

توجه: وقتی که طرح بندی شامل <fragment> باشد، نمی توانید یک طرح بندی را به یک قطعه تبدیل کنید. قطعات تودرتو تنها زمانی پشتیبانی می شوند که به صورت پویا به قطعه اضافه شوند.

Renderscript

عملکرد محاسبه Renderscript با ویژگی های زیر افزایش یافته است:

ذاتی اسکریپت

شما می توانید از ذاتی اسکریپت داخلی Renderscript استفاده کنید که عملیات رایج را برای شما اجرا می کند مانند:

برای استفاده از یک اسکریپت intrinsic، متد static create() هر داخلی را فراخوانی کنید تا نمونه ای از اسکریپت ایجاد شود. سپس متدهای set() موجود هر اسکریپت را به صورت intrinsic فراخوانی کنید تا هر ورودی و گزینه لازم را تنظیم کنید. در نهایت متد forEach() را برای اجرای اسکریپت فراخوانی کنید.

گروه های اسکریپت

ScriptGroup به شما این امکان را می دهد که اسکریپت های Renderscript مرتبط را به هم متصل کرده و آنها را با یک فراخوانی اجرا کنید.

از یک ScriptGroup.Builder برای افزودن همه اسکریپت ها به گروه با فراخوانی addKernel() استفاده کنید. هنگامی که همه اسکریپت ها را اضافه کردید، با فراخوانی addConnection() ارتباط بین اسکریپت ها ایجاد کنید. پس از اتمام افزودن اتصالات، برای ایجاد گروه اسکریپت create() را فراخوانی کنید. قبل از اجرای گروه اسکریپت، Allocation ورودی و اسکریپت اولیه را برای اجرا با متد setInput(Script.KernelID, Allocation) مشخص کنید و Allocation خروجی را که در آن نتیجه روی آن نوشته شود و اسکریپت نهایی با setOutput() اجرا شود. در نهایت، execute() را برای اجرای گروه اسکریپت فراخوانی کنید.

فیلتر اسکریپت

فیلتر اسکریپت محدودیت‌هایی را بر روی APIهای Renderscript موجود تعریف می‌کند که به کد حاصل اجازه می‌دهد تا روی طیف وسیع‌تری از پردازنده‌ها (CPU، GPU و DSP) اجرا شود. برای ایجاد فایل‌های Filterscript، فایل‌های .fs را به جای فایل‌های .rs ایجاد کنید و #pragma rs_fp_relaxed را مشخص کنید تا به زمان اجرای Renderscript بگویید که اسکریپت‌های شما به دقت ممیز شناور IEEE 754-2008 نیاز ندارند. این دقت امکان تراز به صفر را برای denorm و دور به سمت صفر را فراهم می کند. علاوه بر این، اسکریپت های Filterscript شما نباید از انواع داخلی 32 بیتی استفاده کنند و باید یک تابع ریشه سفارشی را با استفاده از ویژگی __attribute__((kernel)) مشخص کنند، زیرا Filterscript از نشانگرها پشتیبانی نمی کند، که امضای پیش فرض تابع root() است. تعریف می کند.

توجه: اگرچه پشتیبانی از Filterscript در پلتفرم وجود دارد، پشتیبانی توسعه دهندگان در نسخه 21.0.1 ابزار SDK در دسترس خواهد بود.

برای مشاهده جزئیات همه تغییرات API در Android 4.2، به گزارش تفاوت های API مراجعه کنید.