אם מטמיעים מסך פתיחה בהתאמה אישית ב-Android 11 או גרסאות קודמות, צריך להעביר את
ל-API SplashScreen
כדי לקבל עזרה
צריך לוודא שהוא יוצג כמו שצריך ב-Android 12 ואילך.
החל מ-Android 12, המערכת מחילה את הקטע במסך הפתיחה שמוגדר כברירת מחדל של מערכת Android
מסך פועל
קר וחם
מתחילה לכל האפליקציות. כברירת מחדל,
מסך הפתיחה הזה של המערכת בנוי באמצעות רכיב סמל סמל מרכז האפליקציות של האפליקציה שלך
וגם windowBackground
של
אם הוא בצבע אחד.
אם לא תעבירו את האפליקציה, יכול להיות שחוויית ההפעלה של האפליקציה ב-Android 12 ואילך תהיה פחות טובה או שתגרום לתוצאות לא רצויות.
אם מסך הפתיחה הקיים מיושם באמצעות עיצוב בהתאמה אישית שמבטל את
android:windowBackground
, המערכת מחליפה את מסך הפתיחה בהתאמה אישית במסך הפתיחה שמוגדר כברירת מחדל ב-Android 12 ואילך. יכול להיות שזו לא חוויית השימוש שציפיתם לה באפליקציה.אם מסך הפתיחה הקיים מוטמע באמצעות
Activity
ייעודי, כשמפעילים את האפליקציה במכשירים עם Android 12 ואילך, מסכי פתיחה כפולים: מסך הפתיחה של המערכת מוצגים ואחריה הפעילות הקיימת של מסך הפתיחה.
כדי למנוע את חוויית השימוש הפגומה או הלא מכוונת הזו, צריך להשלים את תהליך ההעברה שמתואר במסמך הזה. לאחר ההעברה, ה-API משפר את זמן ההפעלה, נותן שליטה מלאה בחוויית מסך הפתיחה, ויוצרים חוויית השקה עקבית יותר עם אפליקציות אחרות בפלטפורמה.
ספריית תאימות ל-SplashScreen
אפשר להשתמש ב-SplashScreen
API ישירות, אבל מומלץ מאוד להשתמש במקום זאת בספריית התאימות של Androidx SplashScreen
. ספריית ה-compat משתמשת ב-API SplashScreen
, מאפשרת תאימות לאחור ויוצרת מראה ועיצוב עקביים של מסך הפתיחה בכל הגרסאות של Android. המסמך הזה נכתב באמצעות
לספרייה.
אם מבצעים את ההעברה ישירות באמצעות ה-API של SplashScreen
, מסך הפתיחה ב-Android 11 ובגרסאות קודמות נראה בדיוק כמו לפני ההעברה. החל מגרסה Android 12, מסך הפתיחה מעוצב בסגנון של Android 12.
אם מבצעים את ההעברה באמצעות ספריית ה-compat של 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 כשטוענים כמות קטנה של נתונים באופן מקומי. מומלץ להשתמש בגישה המומלצת לבחירת עיצוב ולהשהות את העיבוד עד שהאפליקציה מוכנה. כדי להטמיע מסך הפעלה עם תאימות לאחור, פועלים לפי השלבים המפורטים בקטע הצגת מסך הפעלה למשך זמן ארוך יותר.
הצגת ערכי placeholder בעומס מבוסס-רשת עם משך זמן לא ידוע, צריך לסגור את מסך הפתיחה ולהציג placeholders לטעינת נתונים אסינכרוני. כדאי להוסיף לאזור התוכן אנימציות עדינות שמשקפות את מצב הטעינה. צריך לוודא שמבנה התוכן שנטען תואם מבנה שלד כדי לתמוך במעבר חלק כשהתוכן נטען.
שימוש במטמון. כשמשתמש פותח את האפליקציה בפעם הראשונה, אפשר להציג אינדיקטורים של טעינה לחלק מרכיבי ממשק המשתמש, כפי שמוצג באיור הבא. בפעם הבאה שהמשתמש יחזור לאפליקציה, תוכלו להציג את התוכן שנשמר במטמון בזמן שאתם טוענים תוכן עדכני יותר.