Робимо екран завантаження Android додатка правильно

Splash Screen (прим.: тут і далі — екран завантаження) просто забирає ваш час, вірно? Як Android розробник, коли я бачу екран завантаження, я тут же уявляю як деякі погані розробники додають трисекундну затримку в коді.

Я повинен дивитися на якесь зображення протягом декількох секунд, і до тих пір я не можу використовувати додаток. І я повинен це робити кожен раз після запуску програми. Я знаю який додаток я запустив. Я знаю що воно робить. Просто дозвольте мені використати його!

Що рекомендує Google
Ви будете здивовані, дізнавшись, що прихильники Google використовують Splash Screen. Це описано прямо ось тут, у специфікації до Material Design.

Так було не завжди. Google був проти Splash Screen, і навіть назвав його анти-паттерном.

image

Що ж я бачу?

Правильний Splash Screen
Я вважаю, що Google не суперечить сам собі. Старий рада і нові рекомендації добре поєднуються. (Тим не менш, все-таки не дуже гарна ідея використовувати екран завантаження який віднімає час користувача. Будь ласка, не робіть так)

Однак, Android додатків потрібен деякий кількість часу для запуску, особливо при холодному запуску. Існує затримка яку ви не можете уникнути. Замість того щоб показувати порожній екран, чому б не показати користувачеві щось хороше? Саме за цей підхід Google і виступає. Не варто витрачати час користувача, але не показуйте йому порожній, ненастроенный розділ програми, коли він запускає його вперше.

Якщо ви подивіться на останні оновлення Google додатків, ви побачите подібний спосіб використання екрану завантаження. Наприклад, погляньте на додаток YouTube:

image

Кількість часу, який ви витрачаєте на перегляд Splash Screen, точно відповідає кількості часу, який вимагається додатком для запуску. При холодному запуску, це означає що Splash Screen буде видно довше. А якщо програма вже закэшировано, заставка зникне майже відразу.

Реалізація Splash Screen

Реалізація Splash Screen правильним способом трохи відрізняється від того що ви можете собі приставити. Подання Splash Screen, який ви бачите, має бути готове негайно, навіть перш ніж ви можете роздути (прим.: inflate) файл макета у вашій Splash Activity (прим.: Activity — активність, діяльність).

Тому ми не будемо використовувати файл макета. Замість цього ми вкажемо фон нашого Splash Screen фоні теми своєї Activity. Для цього спочатку необхідно створити XML drawable в res/drawable.

Примітка: весь код нижче доступний на GitHub.

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">

<item
android:drawable="@color/gray"/>

<item>
<bitmap
android:gravity="center"
android:src="@mipmap/ic_launcher"/>
</item>

</layer-list>

Тут я поставив колір фону і зображення.

Далі, ви повинні встановити цей drawable в якості фону для теми вашого Splash Screen Activity. Відкрийте файл styles.xml і додайте нову тему для Splash Screen Activity:

<resources>

<!-- Base application theme. -->
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
<!-- Customize your theme here. -->
</style>

<style name="SplashTheme" parent="Theme.AppCompat.NoActionBar">
<item name="android:windowBackground">@drawable/background_splash</item>
</style>
</resources>

У вашій новій SplashTheme встановіть в якості фону ваш XML drawable. Та встановіть цю тему у своїй Splash Screen Activity у вашому AndroidManifest.xml:

<activity
android:name=".SplashActivity"
android:theme="@style/SplashTheme">
<intent-filter>
<action android:name="android.intent.action.MAIN" />

<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>

І, нарешті, ваш клас SplashActivity повинен перенаправити вас у ваше основне 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();
}
}

Зверніть увагу, що ви не налаштовує вигляд для SplashActivity. Подання береться безпосередньо з теми. Коли ви задаєте вигляд вашої Splash Screen Activity через тему, він доступний негайно.

Якщо у вас є файл макета для вашої Splash Activity, він буде показаний тільки після того, як ваш додаток буде повністю ініціалізований, а це дуже пізно. Адже ми хочемо щоб Splash Screen відображався лише невеликий проміжок часу, до того, як додаток буде ініціалізований.

Робимо це правильно
Як тільки кроки вище завершено, ви отримаєте Splash Screen реалізований правильним шляхом:

image

Озброєні цим знанням, змусьте ваш Splash Screen працювати правильно. Не витрачайте час користувачів даремно, але дайте їм те, на що їм буде приємно дивитися поки вони чекають.
Джерело: Хабрахабр

0 коментарів

Тільки зареєстровані та авторизовані користувачі можуть залишати коментарі.