اگر صفحه نمایش سفارشی را در Android 11 یا نسخه های قبلی پیاده سازی می کنید، برنامه خود را به SplashScreen
API منتقل کنید تا از نمایش صحیح آن در اندروید 12 به بعد مطمئن شوید.
با شروع اندروید 12، سیستم صفحه نمایش پیشفرض سیستم اندروید را در شروع سرد و گرم برای همه برنامهها اعمال میکند. به طور پیشفرض، این صفحه نمایش سیستم با استفاده از عنصر نماد راهانداز برنامه شما و windowBackground
طرح زمینه شما، در صورتی که تک رنگ باشد، ساخته میشود.
اگر برنامه خود را انتقال ندهید، تجربه راهاندازی برنامه شما در Android 12 و جدیدتر ممکن است کاهش یابد یا نتایج ناخواسته داشته باشد.
اگر صفحه نمایش اسپلش موجود شما با استفاده از یک طرح زمینه سفارشی که
android:windowBackground
را لغو می کند، پیاده سازی شده است، سیستم صفحه نمایش اسپلش سفارشی شما را با یک صفحه نمایش اسپلش پیش فرض سیستم اندروید در اندروید 12 به بعد جایگزین می کند. ممکن است این تجربه مورد نظر برنامه شما نباشد.اگر صفحه نمایش موجود شما با استفاده از یک
Activity
اختصاصی پیاده سازی شده است، راه اندازی برنامه شما در دستگاه های دارای Android 12 یا جدیدتر منجر به تکراری شدن صفحه نمایش اسپلش می شود: صفحه نمایش اسپلش سیستم نمایش داده می شود و به دنبال آن فعالیت صفحه نمایش اسپلش موجود شما نمایش داده می شود.
شما می توانید با تکمیل فرآیند مهاجرت شرح داده شده در این سند، از این تجارب تخریب شده یا ناخواسته جلوگیری کنید. پس از مهاجرت، API زمان راهاندازی را بهبود میبخشد، به شما کنترل کامل بر تجربه صفحهنمایش اسپلش میدهد و تجربه راهاندازی منسجمتری با سایر برنامههای روی پلتفرم ایجاد میکند.
می توانید مستقیماً از SplashScreen
API استفاده کنید، اما ما قویاً توصیه می کنیم به جای آن از کتابخانه Compat Androidx SplashScreen
استفاده کنید. کتابخانه compat از SplashScreen
API استفاده میکند، سازگاری با عقب را فعال میکند، و ظاهر و احساسی ثابت برای نمایش صفحه نمایش اسپلش در تمام نسخههای اندروید ایجاد میکند. این سند با استفاده از کتابخانه compat نوشته شده است.
اگر مستقیماً با استفاده از SplashScreen
API مهاجرت کنید، در اندروید 11 و قبل از آن، صفحه نمایش اسپلش شما دقیقاً مشابه قبل از انتقال به نظر می رسد. با شروع اندروید 12، صفحه نمایش اسپلش ظاهر و احساس اندروید 12 دارد.
اگر با استفاده از کتابخانه compat SplashScreen
مهاجرت کنید، سیستم در همه نسخههای اندروید صفحه نمایش مشابهی را نمایش میدهد.
مراحل زیر را برای انتقال پیادهسازی Splash Screen موجود خود به Android 12 و بالاتر انجام دهید.
این روش برای هر نوع پیاده سازی که از آن مهاجرت می کنید اعمال می شود. اگر از یک Activity
اختصاصی مهاجرت می کنید، بهترین شیوه های شرح داده شده در این سند را برای تطبیق Activity
سفارشی شده در صفحه نمایش اسپلش دنبال کنید. SplashScreen
API همچنین تأخیر راه اندازی را کاهش می دهد که با یک فعالیت اختصاصی صفحه نمایش اسپلش معرفی شده است.
برای انتقال صفحه نمایش اسپلش، موارد زیر را انجام دهید:
در فایل
build.gradle
،compileSdkVersion
خود را تغییر دهید و کتابخانه compatSplashScreen
را در وابستگی ها قرار دهید.build.gradle android { compileSdkVersion 31 ... } dependencies { ... implementation 'androidx.core:core-splashscreen:1.0.0-beta02' }
یک طرح زمینه با والد
Theme.SplashScreen
ایجاد کنید. مقدارpostSplashScreenTheme
را روی موضوعی کهActivity
باید استفاده کند و مقدارwindowSplashScreenAnimatedIcon
را روی یک ترسیم پذیر یا متحرک تنظیم کنید. سایر صفات اختیاری هستند.<style name="Theme.App.Starting" parent="Theme.SplashScreen"> <!-- Set the splash screen background, animated icon, and animation duration. --> <item name="windowSplashScreenBackground">@color/...</item> <!-- Use windowSplashScreenAnimatedIcon to add a drawable or an animated drawable. One of these is required. --> <item name="windowSplashScreenAnimatedIcon">@drawable/...</item> <!-- Required for animated icons. --> <item name="windowSplashScreenAnimationDuration">200</item> <!-- Set the theme of the Activity that directly follows your splash screen. This is required. --> <item name="postSplashScreenTheme">@style/Theme.App</item> </style>
اگر می خواهید رنگ پس زمینه زیر نماد خود اضافه کنید، می توانید از تم
Theme.SplashScreen.IconBackground
استفاده کنید و ویژگیwindowSplashScreenIconBackground
را تنظیم کنید.در مانیفست، موضوع فعالیت آغازین را با موضوعی که در مرحله قبل ایجاد کردید جایگزین کنید.
<manifest> <application android:theme="@style/Theme.App.Starting"> <!-- or --> <activity android:theme="@style/Theme.App.Starting"> ...
قبل از فراخوانی
super.onCreate()
installSplashScreen
در اکتیویتی آغازین فراخوانی کنید.کاتلین class MainActivity : Activity() { override fun onCreate(savedInstanceState: Bundle?) { // Handle the splash screen transition. val splashScreen = installSplashScreen() super.onCreate(savedInstanceState) setContentView(R.layout.main_activity) ...
جاوا public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { // Handle the splash screen transition. SplashScreen splashScreen = SplashScreen.installSplashScreen(this); super.onCreate(savedInstanceState); setContentView(R.layout.main_activity); } }
installSplashScreen
شیء splash screen را برمی گرداند، که می توانید به صورت اختیاری از آن برای سفارشی کردن انیمیشن یا نگه داشتن صفحه نمایش اسپلش برای مدت طولانی تری روی صفحه استفاده کنید. برای جزئیات بیشتر در مورد سفارشی کردن انیمیشن، نگاه کنید به نگه داشتن صفحه چلپ چلوپ روی صفحه برای مدت زمان طولانی و سفارشی کردن انیمیشن برای رد کردن صفحه نمایش اسپلش .
پس از انتقال به صفحه نمایش اسپلش برای اندروید 12 و نسخه های جدیدتر، تصمیم بگیرید که با Activity
صفحه نمایش سفارشی قبلی خود چه کاری انجام دهید. شما گزینه های زیر را دارید:
- فعالیت سفارشی را حفظ کنید، اما از نمایش آن جلوگیری کنید.
- فعالیت سفارشی را به دلایل نام تجاری حفظ کنید.
- فعالیت سفارشی را حذف کنید و برنامه خود را در صورت نیاز تطبیق دهید.
اگر Activity
قبلی صفحه نمایش شما عمدتاً برای مسیریابی استفاده می شود، راه هایی را برای حذف آن در نظر بگیرید. برای مثال، ممکن است مستقیماً به فعالیت واقعی پیوند دهید یا به یک فعالیت تکی با اجزای فرعی بروید. اگر این امکان پذیر نیست، می توانید از SplashScreen.setKeepOnScreenCondition
استفاده کنید تا فعالیت مسیریابی را در جای خود نگه دارید اما از رندر شدن آن جلوگیری کنید. با انجام این کار، صفحه نمایش اسپلش به فعالیت بعدی منتقل می شود و از انتقال صاف پشتیبانی می کند.
class RoutingActivity : Activity() { override fun onCreate(savedInstanceState: Bundle?) { val splashScreen = installSplashScreen() super.onCreate(savedInstanceState) // Keep the splash screen visible for this Activity. splashScreen.setKeepOnScreenCondition { true } startSomeNextActivity() finish() } ...
public class RoutingActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { SplashScreen splashScreen = SplashScreen.installSplashScreen(this); super.onCreate(savedInstanceState); // Keep the splash screen visible for this Activity. splashScreen.setKeepOnScreenCondition(() -> true ); startSomeNextActivity(); finish(); } ...
اگر میخواهید به دلایل نام تجاری از یک Activity
قبلی در صفحه نمایش اسپلش استفاده کنید، میتوانید با سفارشی کردن انیمیشن برای رد کردن صفحه نمایش اسپلش، از «سیستم اسپلشاسکرین» به « Activity
صفحه نمایش اسپلش» سفارشی خود تغییر دهید. با این حال، بهتر است در صورت امکان از این سناریو اجتناب کنید و از SplashScreen
API برای مارک صفحه نمایش خود استفاده کنید.
اگر نیاز به نمایش یک دیالوگ دارید، توصیه میکنیم آن را روی فعالیت سفارشی صفحه نمایش سفارشی بعدی یا روی فعالیت اصلی پس از پخش صفحه نمایش سیستم نمایش دهید.
به طور کلی، توصیه میکنیم برای جلوگیری از تکراری شدن صفحههای چلپ چلوپ، افزایش کارایی و کاهش زمان بارگذاری صفحه نمایش اسپلش Activity
سفارشی قبلی خود را حذف کنید. تکنیکهای مختلفی وجود دارد که میتوانید برای جلوگیری از نمایش فعالیتهای اضافی در صفحه نمایش اسپلش استفاده کنید.
از بارگذاری تنبل برای مؤلفه ها، ماژول ها یا کتابخانه های خود استفاده کنید. از بارگیری یا مقداردهی اولیه مؤلفه ها یا کتابخانه هایی که برای کارکرد برنامه در هنگام راه اندازی لازم نیستند، خودداری کنید. بعداً، زمانی که برنامه به آنها نیاز داشت، آنها را بارگیری کنید.
اگر برنامه شما واقعاً به یک مؤلفه نیاز دارد تا به درستی کار کند، آن را فقط زمانی بارگیری کنید که واقعاً مورد نیاز است و نه در زمان راه اندازی، یا از یک رشته پس زمینه برای بارگیری آن پس از شروع برنامه استفاده کنید. سعی کنید
Application.onCreate()
خود را تا حد امکان سبک نگه دارید.همچنین می توانید از استفاده از کتابخانه App Startup برای مقداردهی اولیه اجزا در هنگام راه اندازی برنامه بهره مند شوید. هنگام انجام این کار، مطمئن شوید که هنوز همه ماژولهای مورد نیاز برای شروع فعالیت را بارگیری میکنید و جاهایی که ماژولهای با تنبلی بارگذاری شده در دسترس میشوند، janks را معرفی نکنید.
هنگام بارگیری مقدار کمی داده به صورت محلی، یک مکان نگهدار ایجاد کنید. از رویکرد طرح زمینه توصیه شده استفاده کنید و رندر را تا زمانی که برنامه آماده شود متوقف کنید. برای پیادهسازی یک صفحه نمایش اسپلش که سازگار با عقب است، مراحل ذکر شده در صفحه نمایش اسپلش را برای مدت طولانیتر روی صفحه نگه دارید دنبال کنید.
نشان دادن متغیرها برای بارگذاریهای مبتنی بر شبکه با مدتزمان نامشخص، صفحه نمایش اسپلش را رد کنید و متغیرهایی را برای بارگیری ناهمزمان نشان دهید. استفاده از انیمیشن های ظریف را در ناحیه محتوا در نظر بگیرید که وضعیت بارگذاری را منعکس می کند. اطمینان حاصل کنید که ساختار محتوای بارگذاری شده تا حد ممکن با ساختار اسکلت مطابقت دارد تا هنگام بارگیری محتوا از یک انتقال صاف پشتیبانی کند.
از کش استفاده کنید . هنگامی که کاربر برای اولین بار برنامه شما را باز می کند، می توانید نشانگرهای بارگیری برخی از عناصر رابط کاربری را نشان دهید، همانطور که در شکل زیر نشان داده شده است. دفعه بعد که کاربر به برنامه شما برمی گردد، می توانید این محتوای کش شده را در حین بارگیری محتوای جدیدتر نشان دهید.