سطح 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 های مناسب استفاده کنید:
- برای دسترسی به حافظه داخلی، از
getFilesDir()
،getCacheDir()
یاopenFileOutput()
استفاده کنید. - برای دسترسی به حافظه خارجی، از
getExternalFilesDir()
یاgetExternalStoragePublicDirectory()
استفاده کنید.
مهم نیست که از کدام یک از این 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 دارید، دو سطح اساسی از بهینه سازی وجود دارد:
- ویژگی های طرح بندی چپ و راست را به ویژگی های طرح بندی شروع و پایان تبدیل کنید.
برای مثال،
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
. - یا برای ارائه بهینهسازی کامل برای طرحبندیهای 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 استفاده کنید که عملیات رایج را برای شما اجرا می کند مانند:
-
Blends
-
Blur
-
Color matrix
-
3x3 convolve
-
5x5 convolve
-
Per-channel lookup table
-
Converting an Android YUV buffer to RGB
برای استفاده از یک اسکریپت 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 مراجعه کنید.