Android Application Developer https://behnamnasehi.ir
روش صحیح ساختن Splash در اندروید
باید و نباید وجود Splash رو نمیخوام بحث کنم ولی همیشه باعث اعصاب خوردیم میشد که وقتی یک اپلیکیشن رو باز میکنم و هی صفحه Splash رو به روخ میکشه ! من میدونم چه اپی رو باز کردم فقط بزار ازش استفاده کنم !!!!!
توسعه دهنده اندروید هستم این باعث شد که متوجه بشم که وقتی تو پروژه هام از Splash استفاده میکنم شاید همینقدر برای کاربر رو مخ باشه...
گوگل چی میگه ؟
گوگل قبلا از Splash حمایت میکرده ولی همیشه اینطور نبوده و حتی اون رو انتی پترن صدا زده.
Splash به روش صحیح !
از صفحه های Splash استفاده نکنید وقت کاربر رو هدر میده , خب پس چیکار کنیم ؟
دیدید وقتی اپلیکیشن رو باز میکنید یه چند ثانیه اول تاخیر داره و بعضی اوقات صفحه خالی نشون میده ؟
بووووم همینه !
باید از موقعیت ها استفاده کنیم , چرا کاربر رو معطل کنیم ؟ وقتی چند ثانیه وقت داریم تا اپ باز بشه چرا همونجا کار رو یکسره نکنیم و 3 ثانیه دیگه به انتظارش اضافه نکنیم ؟
اگه به اپدیت های جدید اپ های گوگل نگاه کنید میبینید که همین کارو کردن مثلا YouTube :
مقدار زمانی که شما صرف دیدن این صفحه میکنید دقیقا همون زمانیه که اپلیکیشن نیاز داره تا قشنگ لود بشه و در صورت لود شدن اپلیکیشن تقریبا بلافاصله از بین میره
خب بریم سر اجرا
اجرا ممکنه با اون چیزی که فک میکنید یکم متفاوت باشه چون صفحه باید سریع بالا بیاد حتی وقت این رو هم ندارید که توی SplashActivity صفحه رو inflate کنین !
ما از layout استفاده نمیکنیم , بجاش بکگراند رو از Theme تنظیم میکنیم برای این کار یه فایل XML drawable در res/drawable ایجاد میکنیم :
<?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>
در اینجا ، من یک رنگ پس زمینه و یک تصویر تنظیم کرده ام.
خب حالا برید داخل فایل Style.xml و یک Theme جدید برای SplashActivity اضافه کنید :
<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>
و حالا باید داخل AndroidManifest.xml به SplashActivity اتربیوت Theme رو اضافه کنید و اون Theme که ساختید رو بهش بدید :
<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 باید به MainActivity فروارد بشه :
public class SplashActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Intent intent = new Intent(this, MainActivity.class);
startActivity(intent);
finish();
}
}
توجه داشته باید که شما هیچ View برای SplashActivity نساختید و View از Theme میاد
درست انجام دادیم :)
فرقش با روش قدیمی اینه که وقتی نشون داده میشه که اپ داره کانفیگ میشه و اگر از روش قدیمی استفاده کنید بعد از کانفینگ اپ بالا میاد
برفرض اینکه کانفیگ اپ شما 2 ثانیه باشه :
روش قدیمی : شما 2 ثانیه هم به Splash میدید و وقتی اپ رو باز میکنید دو ثانیه کانفیگ میشه و بعد 2 ثانیه Splash شمارو نشون میده.
روش جدید : در همون 2 ثانیه کانفیگ Splash شما نشون داده میشه و هیچ وقتی از کاربر نمیگیره
انقدر کاربرا رو اذیت نکنید !
امیدوارم که تونسته باشم کمکتون کنم اگه جایی اشتباه کردم اول معذرت میخوام دوم لطفا بهم بگید تا ویرایش کنم !
راستی پست قبلی منو خوندید ؟
یه سری بهش بزنید
Ref :
- https://www.bignerdranch.com/blog/splash-screens-the-right-way/
- https://medium.com/@shishirthedev/the-right-way-to-implement-a-splash-screen-in-android-acae0e52949a
مطلبی دیگر از این انتشارات
لیستی از مفاهیم مهم برای درک بهتر برنامه نویسی اندروید
مطلبی دیگر از این انتشارات
اندروید - پشتیبان گیری از داده های کاربر (SharedPreferences) با استفاده از Auto Backup
مطلبی دیگر از این انتشارات
باگ اندروید استدیو ۳.۴.۱