پیاده‌سازی صفحه اسپلش را به Android 12 و نسخه‌های جدیدتر انتقال دهید

اگر صفحه اسپلش سفارشی را در Android نسخه ۱۱ یا قدیمی‌تر پیاده‌سازی می‌کنید، برنامه‌تان را به SplashScreen API منتقل کنید تا مطمئن شوید در Android نسخه ۱۲ و جدیدتر به‌درستی نمایش داده می‌شود.

از Android 12، سیستم صفحه اسپلش پیش‌فرض سیستم Android را در راه‌اندازی‌های سرد و گرم برای همه برنامه‌ها اعمال می‌کند. به‌طور پیش‌فرض، این صفحه ورود به سیستم بااستفاده از عنصر نماد راه‌انداز برنامه شما و windowBackground رنگ زمینه شما، درصورتی‌که تک‌رنگ باشد، ساخته می‌شود.

اگر برنامه‌تان را منتقل نکنید، ممکن است تجربه راه‌اندازی برنامه‌تان در Android نسخه ۱۲ و جدیدتر تنزل پیدا کند یا نتایج ناخواسته‌ای داشته باشد.

  • اگر صفحه اسپلش موجود شما بااستفاده از زمینه سفارشی‌ای پیاده‌سازی شده است که android:windowBackground را لغو می‌کند، سیستم صفحه اسپلش سفارشی شما را با صفحه اسپلش پیش‌فرض سیستم Android در Android 12 و نسخه‌های جدیدتر جایگزین می‌کند. ممکن است این تجربه موردنظر برنامه‌تان نباشد.

  • اگر صفحه اسپلش موجودتان بااستفاده از Activity اختصاصی پیاده‌سازی شده باشد، راه‌اندازی برنامه‌تان در دستگاه‌های دارای Android نسخه ۱۲ یا بالاتر منجر به صفحه اسپلش تکراری می‌شود: صفحه اسپلش سیستم نمایش داده می‌شود و سپس فعالیت صفحه اسپلش موجودتان نشان داده می‌شود.

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

کتابخانه سازگاری SplashScreen

می‌توانید مستقیماً از SplashScreen API استفاده کنید، اما قویاً توصیه می‌کنیم به‌جای آن از کتابخانه سازگاری Androidx SplashScreen استفاده کنید. کتابخانه سازگاری از SplashScreen API استفاده می‌کند، سازگاری با نسخه قدیمی را فعال می‌کند، و ظاهر و احساس یکسانی برای نمایش صفحه اسپلش در همه نسخه‌های Android ایجاد می‌کند. این سند بااستفاده از کتابخانه سازگاری نوشته شده است.

اگر بااستفاده از SplashScreen API مستقیماً انتقال دهید، در Android 11 و نسخه‌های قدیمی‌تر صفحه اسپلش شما دقیقاً مانند قبل‌از انتقال خواهد بود. از Android نسخه ۱۲، صفحه اسپلش ظاهر و حس Android نسخه ۱۲ را دارد.

اگر بااستفاده از کتابخانه سازگاری SplashScreen مهاجرت کنید، سیستم همان صفحه اسپلش را در همه نسخه‌های Android نمایش می‌دهد.

انتقال پیاده‌سازی صفحه لمسی

مراحل زیر را برای انتقال پیاده‌سازی صفحه اسپلش موجود به Android 12 و نسخه‌های بالاتر تکمیل کنید.

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

برای انتقال صفحه اسپلش، کارهای زیر را انجام دهید:

  1. در فایل build.gradle، compileSdkVersion خود را تغییر دهید و کتابخانه سازگار SplashScreen را در وابستگی‌ها اضافه کنید.

    build.gradle
    
    android {
       compileSdkVersion 31
       ...
    }
    dependencies {
       ...
       implementation 'androidx.core:core-splashscreen:1.0.0-beta02'
    }
    
  2. موضوعی با ولی Theme.SplashScreen ایجاد کنید. مقدار postSplashScreenTheme را روی زمینه‌ای تنظیم کنید که Activity باید استفاده کند و مقدار windowSplashScreenAnimatedIcon را روی drawable یا animated drawable تنظیم کنید. مشخصه‌های دیگر اختیاری هستند.

    <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 مشخصه را تنظیم کنید.

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

    <manifest>
       <application android:theme="@style/Theme.App.Starting">
        <!-- or -->
            <activity android:theme="@style/Theme.App.Starting">
    ...
    
  4. installSplashScreen را در فعالیت شروع‌کننده قبل‌از فراخوانی super.onCreate() فراخوانی کنید.

    کاتلین

    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 شیء صفحه ورود را برمی‌گرداند که می‌توانید به‌صورت اختیاری از آن برای سفارشی‌سازی پویانمایی یا نگه داشتن صفحه ورود روی صفحه برای مدت طولانی‌تر استفاده کنید. برای جزئیات بیشتر درباره سفارشی‌سازی پویانمایی، نگه داشتن صفحه برافزا در صفحه برای مدت طولانی‌تر و سفارشی‌سازی پویانمایی برای بستن صفحه برافزا را ببینید.

«فعالیت» صفحه نمایش آغازین سفارشی را با صفحه نمایش آغازین تطبیق دهید

پس‌از انتقال به صفحه اسپلش برای Android نسخه ۱۲ و بالاتر، تصمیم بگیرید که با صفحه اسپلش سفارشی قبلی‌تان 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 میانای برنامه‌سازی کاربردی برای نمانام‌سازی صفحه اسپلش خود استفاده کنید.

اگر لازم است کادر گفتگویی نمایش دهید، توصیه می‌کنیم آن را روی فعالیت صفحه اسپلش سفارشی بعدی یا روی فعالیت اصلی بعداز صفحه اسپلش سیستم نمایش دهید.

برداشتن «فعالیت» صفحه آغازین سفارشی

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

  • از بار کردن کُند برای مؤلفه‌ها، ماژول‌ها، یا کتابخانه‌هایتان استفاده کنید. از بار کردن یا مقداردهی اولیه مؤلفه‌ها یا کتابخانه‌هایی که برای کار کردن برنامه در زمان راه‌اندازی لازم نیستند خودداری کنید. بعداً وقتی برنامه به آن‌ها نیاز داشت، آن‌ها را بار کنید.

    اگر برنامه‌تان واقعاً برای عملکرد صحیح به مؤلفه‌ای نیاز دارد، آن را فقط زمانی بار کنید که واقعاً به آن نیاز است و نه در زمان راه‌اندازی، یا از یک رشته پس‌زمینه‌ای برای بار کردن آن پس‌از شروع برنامه استفاده کنید. سعی کنید Application.onCreate() را تا حد امکان سبک نگه دارید.

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

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

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

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

شکل ۱. درحال نمایش جای‌بان‌های میانای کاربری.