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

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

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

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

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

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

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

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

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

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

אם תתבצע העברה באמצעות ספריית התאימות של 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 לערך שניתן להזזה או לאנימציה פריט גרפי שניתן להזזה. שאר המאפיינים הם אופציונליים.

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

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

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

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

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

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