אם מטמיעים מסך פתיחה בהתאמה אישית ב-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
מפחית את ההפעלה
זמן אחזור שנוצר עם פעילות ייעודית של מסך פתיחה.
כדי להעביר את מסך הפתיחה:
בקובץ
build.gradle
, לשנות אתcompileSdkVersion
ולכלול את הספרייה המתאימהSplashScreen
ביחסי תלות.build.gradle android { compileSdkVersion 31 ... } dependencies { ... implementation 'androidx.core:core-splashscreen:1.0.0-beta02' }
יצירת עיצוב עם הורה של
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
.במניפסט, צריך להחליף את העיצוב של הפעילות ההתחלתית בעיצוב שבחרת בשלב הקודם,
<manifest> <application android:theme="@style/Theme.App.Starting"> <!-- or --> <activity android:theme="@style/Theme.App.Starting"> ...
צריך להתקשר אל
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 לטעינה אסינכרונית. כדאי להחיל אנימציות עדינות על אזור התוכן שמשקפות את במצב הטעינה. צריך לוודא שמבנה התוכן שנטען תואם מבנה שלד כדי לתמוך במעבר חלק כשהתוכן נטען.
שימוש בשמירה במטמון. כשמשתמש פותח את האפליקציה בפעם הראשונה, אפשר להציג של חלק מהרכיבים בממשק המשתמש, כפי שמוצג באיור הבא. בפעם הבאה שהמשתמש יחזור לאפליקציה, תוכלו להציג את התוכן ששמור במטמון אתם טוענים תוכן עדכני יותר.