پیاده‌سازی Splash Screen خود را به Android 12 و بالاتر منتقل کنید

اگر صفحه نمایش سفارشی را در Android 11 یا نسخه های قبلی پیاده سازی می کنید، برنامه خود را به SplashScreen API منتقل کنید تا از نمایش صحیح آن در اندروید 12 به بعد مطمئن شوید.

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

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

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

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

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

کتابخانه compat SplashScreen

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

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

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

پیاده سازی Splash Screen خود را مهاجرت کنید

مراحل زیر را برای انتقال پیاده‌سازی Splash Screen موجود خود به Android 12 و بالاتر انجام دهید.

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

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

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

    build.gradle
    
    android {
       compileSdkVersion 31
       ...
    }
    dependencies {
       ...
       implementation 'androidx.core:core-splashscreen:1.0.0-beta02'
    }
    
  2. یک طرح زمینه با والد 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 را تنظیم کنید.

  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 شیء 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 را معرفی نکنید.

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

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

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

شکل 1. نمایش متغیرهای UI.