Продолжительность экрана-заставки Android
Мы используем заставку, чтобы показать логотип компании каждый раз, когда пользователь открывает приложение. В настоящее время мы показываем заставку в течение 3 секунд.
Ниже приведен код:
private static int SPLASH_TIME_OUT = 3000; // Delay of 3 Seconds
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_splash_screen);
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
// This method will be executed once the timer is over
Intent i = new Intent(SplashScreenActivity.this, AnotheActivity.class);
startActivity(i);
// close this activity
finish();
}
}, SPLASH_TIME_OUT);
}
}
Но эта продолжительность экрана-заставки просто случайно выбрана в команде. Мы вроде как знаем, что заставка в целом-это не все, что поощряется в экосистеме приложений для Android, но поскольку это потребность нашего приложения, следовательно, она реализована.
Мой вопрос : есть ли стандартный Android руководство / лучшая практика для выбора правильного времени продолжительности экрана заставки?
4 ответа:
Лучший вариант-использовать действие заставки с пользовательской темой, которая запускает основное действие контента. При этом нет необходимости использовать таймер, так как он переключается на основной контент, когда приложение готово, а тем временем показывает картинку, которая находится внутри темы.
Вот учебник, как это сделать - https://www.bignerdranch.com/blog/splash-screens-the-right-way/
Основные части из учебника:
<activity android:name=".SplashActivity" android:theme="@style/SplashTheme"> THEME HERE!!! <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> public class SplashActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); Intent intent = new Intent(this, MainActivity.class); startActivity(intent); finish(); } } <style name="SplashTheme" parent="Theme.AppCompat.DayNight.NoActionBar"> <item name="android:windowBackground">@drawable/splash</item> </style> <?xml version="1.0" encoding="utf-8"?> <layer-list xmlns:android="http://schemas.android.com/apk/res/android"> <item android:drawable="@color/black"/> <item> <bitmap android:gravity="center" android:src="@drawable/logo_image"/> </item> </layer-list>
Можно даже добавить стиль к применение, без необходимости использовать отдельный вид деятельности.
Рекомендации Google довольно ясны. Используйте заставку только в случае необходимости. (Если у вас нет ничего, чтобы показать пользователю) он должен быть виден только до тех пор, пока у вас есть некоторые данные, чтобы показать. Если вы пройдете через Google apps, вы очень скоро увидите splashscreen. Есть гораздо более умные способы брендирования вашего приложения. Вы можете найти больше данных здесь.
Общепринятое стандартное решение использует тему запуска.
Проверьте этот пост: http://saulmm.github.io/avoding-android-cold-starts
Заставка это плохая практика, когда ее можно не использовать, чем, пожалуйста, избегайте использования заставки. Вы можете прочитать несколько статей об этом link1, link2 .
Но если нужно показать всплеск, чем использовать через создание пользовательской темы, которая переопределяет
android:windowBackground
, то замените эту пользовательскую тему вашей стандартной темой перед вызовомsuper.onCreate()
. Вот учебник реализации и подробное описание.Предполагая, что у вас есть тема под названием AppTheme, ваш пусковая тема будет:
<style name="AppTheme.Launcher"> <item name="android:windowBackground">@drawable/launch_screen</item> </style>
Затем примените вашу тему к вашей деятельности в вашем AndroidManifest.xml с использованием
Самый простой способ вернуться к своей обычной теме-вызвать setTheme (R. style.AppTheme) перед супер.onCreate () и setContentView ():android:theme="@style/AppTheme.Launcher".
public class MyMainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { // Make sure this is before calling super.onCreate setTheme(R.style.Theme_MyApp); super.onCreate(savedInstanceState); // ... } }