צריך להעביר את ההטמעה של מסך הפתיחה ל-Android 12 ואילך

אם הטמעתם מסך פתיחה מותאם אישית ב-Android 11 ואילך, כדאי להעביר את האפליקציה ל-API של SplashScreen כדי לוודא שהיא תוצג בצורה תקינה ב-Android 12 ואילך.

החל מגרסה 12 של Android, המערכת מחילה את מסך הפתיחה שמוגדר כברירת מחדל במערכת Android על הפעלות ראשוניות ועל הפעלות חוזרות של כל האפליקציות. כברירת מחדל, מסך הפתיחה של המערכת נוצר באמצעות רכיב הסמל של האפליקציה במרכז האפליקציות והסמל windowBackground של העיצוב, אם הוא בצבע אחד.

אם לא תעבירו את האפליקציה, יכול להיות שחוויית ההפעלה של האפליקציה ב-Android 12 ואילך תהיה פחות טובה או שתגרום לתוצאות לא רצויות.

  • אם מסך הפתיחה הקיים מיושם באמצעות עיצוב מותאם אישית שמבטל את android:windowBackground, המערכת מחליפה את מסך הפתיחה המותאם אישית במסך הפתיחה שמוגדר כברירת מחדל ב-Android 12 ואילך. יכול להיות שזו לא חוויית השימוש שציפיתם לה באפליקציה.

  • אם מסך הפתיחה הקיים מיושם באמצעות Activity ייעודי, הפעלת האפליקציה במכשירים עם Android מגרסה 12 ואילך תוביל להצגה של שני מסכי פתיחה: מסך הפתיחה של המערכת ואחריו הפעילות של מסך הפתיחה הקיים.

כדי למנוע את חוויית השימוש הפגומה או הלא מכוונת הזו, צריך להשלים את תהליך ההעברה שמתואר במסמך הזה. אחרי ההעברה, ה-API יקצר את זמן ההפעלה, ייתן לכם שליטה מלאה על חוויית המסך הפותח ויאפשר לכם ליצור חוויית הפעלה עקבית יותר עם אפליקציות אחרות בפלטפורמה.

ספריית תאימות ל-SplashScreen

אפשר להשתמש ב-SplashScreen API ישירות, אבל מומלץ מאוד להשתמש במקום זאת בספריית התאימות של Androidx SplashScreen. ספריית ה-compat משתמשת ב-API ‏SplashScreen, מאפשרת תאימות לאחור ויוצרת מראה ועיצוב עקביים של מסך הפתיחה בכל הגרסאות של Android. המסמך הזה נכתב באמצעות הספרייה compat.

אם מבצעים את ההעברה ישירות באמצעות ה-API של SplashScreen, מסך הפתיחה ב-Android 11 ובגרסאות קודמות נראה בדיוק כמו לפני ההעברה. החל מגרסה Android 12, מסך הפתיחה מעוצב בסגנון של Android 12.

אם מבצעים את ההעברה באמצעות ספריית ה-compat של SplashScreen, המערכת מציגה את אותו מסך הפתיחה בכל הגרסאות של Android.

העברת ההטמעה של מסך הפתיחה

כדי להעביר את ההטמעה הקיימת של מסך הפתיחה ל-Android 12 ואילך, מבצעים את השלבים הבאים.

ההליך הזה רלוונטי לכל סוג הטמעה שממנה אתם עוברים. אם אתם עוברים מ-Activity ייעודי, עליכם לפעול לפי השיטות המומלצות שמפורטות במסמך הזה כדי להתאים אישית את מסך הפתיחה Activity. בנוסף, ה-API של SplashScreen מפחית את זמן האחזור של תהליך ההפעלה שנגרם כתוצאה מפעילות ייעודית של מסך פתיחה.

כדי להעביר את מסך הפתיחה:

  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 או ל-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().

    Kotlin

    class MainActivity : Activity() {
    
       override fun onCreate(savedInstanceState: Bundle?) {
           // Handle the splash screen transition.
           val splashScreen = installSplashScreen()
    
           super.onCreate(savedInstanceState)
           setContentView(R.layout.main_activity)
    ...
    

    Java

    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 כדי לשמור על פעילות הניתוב במקום אבל להפסיק את הרינדור שלה. כך תוכלו להעביר את מסך הפתיחה לפעילות הבאה ולאפשר מעבר חלק.

Kotlin

  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()
     }
   ...
  

Java

  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() קל ככל האפשר.

    כדאי גם להשתמש בספריית ההפעלה של האפליקציה כדי לאתחל רכיבים בזמן ההפעלה של האפליקציה. כשעושים זאת, חשוב לוודא שעדיין נטענים כל המודולים הנדרשים לפעילות ההתחלה, ושאין שיבושים בזמן שהמודולים שנטענו בזלזול הופכים לזמינים.

  • יוצרים placeholder בזמן טעינת כמות קטנה של נתונים באופן מקומי. מומלץ להשתמש בגישה המומלצת לבחירת עיצוב ולהשהות את העיבוד עד שהאפליקציה מוכנה. כדי להטמיע מסך הפעלה שתואם לאחור, פועלים לפי השלבים שמפורטים בקטע הצגת מסך הפעלה למשך זמן ארוך יותר.

  • הצגת ערכי placeholder בעומס מבוסס-רשת עם משך זמן לא ידוע, צריך לסגור את מסך הפתיחה ולהציג placeholders לטעינת נתונים אסינכרוני. כדאי להוסיף לאזור התוכן אנימציות עדינות שמשקפות את מצב הטעינה. כדי שהמעבר יהיה חלק ככל האפשר כשהתוכן נטען, חשוב לוודא שמבנה התוכן שנטען תואם ככל האפשר למבנה השלד.

  • שימוש במטמון. כשמשתמש פותח את האפליקציה בפעם הראשונה, אפשר להציג אינדיקטורים של טעינה לחלק מרכיבי ממשק המשתמש, כפי שמוצג באיור הבא. בפעם הבאה שהמשתמש יחזור לאפליקציה, תוכלו להציג את התוכן שנשמר במטמון בזמן שאתם טוענים תוכן עדכני יותר.

איור 1. הצגת placeholders של ממשק המשתמש.