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

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

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

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

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

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

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

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

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

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

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

پیاده‌سازی صفحه نمایش چلپ‌اسپیل خود را منتقل کنید

مراحل زیر را برای انتقال پیاده‌سازی صفحه شروع فعلی خود به اندروید ۱۲ و بالاتر انجام دهید.

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

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

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

    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 شیء صفحه شروع را برمی‌گرداند، که می‌توانید به صورت اختیاری از آن برای سفارشی‌سازی انیمیشن یا نگه‌داشتن صفحه شروع برای مدت طولانی‌تر روی صفحه استفاده کنید. برای جزئیات بیشتر در مورد سفارشی‌سازی انیمیشن، به Keep the splash screen on-screen for longer periods و Customize the animation for dismiss the splash screen مراجعه کنید.

فعالیت صفحه شروع سفارشی خود را با صفحه شروع تطبیق دهید

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

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

جلوگیری از نمایش فعالیت سفارشی

اگر Activity صفحه شروع قبلی شما در درجه اول برای مسیریابی استفاده می‌شود، راه‌هایی برای حذف آن در نظر بگیرید. برای مثال، می‌توانید مستقیماً به activity اصلی لینک دهید یا به activity دیگری با subcomponents منتقل شوید. اگر این کار امکان‌پذیر نیست، می‌توانید از SplashScreen.setKeepOnScreenCondition برای نگه داشتن activity مسیریابی در جای خود اما جلوگیری از رندر شدن آن استفاده کنید. انجام این کار، splash screen را به activity بعدی منتقل می‌کند و از یک انتقال روان پشتیبانی می‌کند.

کاتلین

  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 برای مقداردهی اولیه کامپوننت‌ها در هنگام راه‌اندازی برنامه بهره ببرید. هنگام انجام این کار، مطمئن شوید که تمام ماژول‌های مورد نیاز برای اکتیویتی اولیه را بارگذاری می‌کنید و در جایی که ماژول‌های بارگذاری شده با تنبلی در دسترس قرار می‌گیرند، jank ایجاد نکنید.

  • هنگام بارگذاری مقدار کمی از داده‌ها به صورت محلی، یک placeholder ایجاد کنید. از رویکرد قالب‌بندی پیشنهادی استفاده کنید و رندر را تا زمان آماده شدن برنامه متوقف کنید. برای پیاده‌سازی یک صفحه شروع که با نسخه‌های قبلی سازگار است، مراحل ذکر شده در Keep the splash screen on screen for longer periods را دنبال کنید.

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

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

شکل ۱. نمایش متغیرهای رابط کاربری.