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

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

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

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

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

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

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

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

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

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

«فعالیت» صفحه اسپلش سفارشی‌تان را با صفحه اسپلش تطبیق دهید

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

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

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

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

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

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

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

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

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

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

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