Android splash screen while loading MainActivity

15,743

Solution 1

make a splash screen like this:

while(counter < 1300) {
    try {
            Thread.sleep(1000);
        }catch(InterruptedException e) {
            e.printStackTrace();
        }
        counter+=100;
    }

    Intent intent = new Intent(SplashActivity.this, MainActivity.class);
    startActivity(intent);

Hope it helps!

EDIT: Anotehr way to make a splash would be like this:

Handler handler = new Handler();
handler.postDelayed(new Runnable() {
    public void run() {
         Intent intent = new Intent(getApplicationContext(), YourNextActivity.class);
         startActivity(intent);
    }
},3000); -> the splash will show for 3000 ms, you can reduce this.

Solution 2

Easy way to do it..

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;

import com.example.tabs.R;

public class Splash extends Activity implements Runnable
{

    Thread mThread;

    @Override
    protected void onCreate(Bundle savedInstanceState) 
    {
        super.onCreate(savedInstanceState);

        setContentView(R.layout.splash);

        mThread = new Thread(this);

        mThread.start();
    }

    @Override
    public void run() 
    {
        try
        {
            Thread.sleep(2000);
        }
        catch (Exception e) 
        {
            e.printStackTrace();
        }
        finally
        {
            startActivity(new Intent(Splash.this, MainActivity.class));

            finish();
        }
    }

}

splash.xml if you want to show a image

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:background="@drawable/splash" >


</LinearLayout>

Note if you want to do some UI operation in splash .Then you have to create a handler and update UI in it.

Solution 3

The main thread cannot be blocked for a long time. You should use Handler to trigger another event if you want to start another event in 3 seconds. You can use sendMessageDelayed. In addition, startActivity should be called in main thread.

Share:
15,743

Related videos on Youtube

Hugo M. Zuleta
Author by

Hugo M. Zuleta

Updated on September 16, 2022

Comments

  • Hugo M. Zuleta
    Hugo M. Zuleta over 1 year

    So, I just read this question: How do I make a splash screen? But instead of adding a fixed delay (like in the top answer), I wanted to keep the splash screen on while the MainActivity (with a MapFragment) loads.

        public class SplashScreen extends Activity {
            @Override
            protected void onCreate(Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);
                setContentView(R.layout.activity_splash);
    
                Thread t = new Thread(new Runnable() {          
                    @Override
                    public void run() {
                        Intent i = new Intent(SplashScreen.this, MainActivity.class);
                        startActivity(i);
                        synchronized (this) {
                              try {
                                wait(3000);
                                System.out.println("Thread waited for 3 seconds");
                            } catch (InterruptedException e) {
                                // TODO Auto-generated catch block
                                e.printStackTrace();
                            }
                        }       
                    }
                });
                try {
                    t.start();
                    t.join();
                    finish();
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
    }
    

    I added the wait(3000) line, because I noticed before that the thread didn't live for long. However, if I make it wait for longer, there's just a black screen that lasts longer. For some reason, the SplashScreen activity won't show the ImageView. What should I do? Thanks.

  • Hugo M. Zuleta
    Hugo M. Zuleta over 10 years
    Will try it! I'll make sure to tell you if it does. Thanks.
  • Hugo M. Zuleta
    Hugo M. Zuleta about 10 years
    I didn't give you the -1, I accepted the answer. (:
  • Rat-a-tat-a-tat Ratatouille
    Rat-a-tat-a-tat Ratatouille about 10 years
    @HugoM.Zuleta Lol it wasnt you :).. someone else did. :).. i just wanted to know the reason so that i could improve if i was wrong..
  • Peter
    Peter over 9 years
    reason ? cos it's not correct splash
  • nizam.sp
    nizam.sp over 8 years
    Purpose of splash screen is to show the logo till the activity is loaded. Its not meant for a fixed time showing. On slower phones, the splash screen will appear longer and in faster phones it will just flash.
  • Zeeshan Shabbir
    Zeeshan Shabbir over 7 years
    this is not the best way.
  • Zar E Ahmer
    Zar E Ahmer over 7 years
    Yes not the best way. there are other ways like TimerTask,Handler,CountDownTimer. Handler is preferable.
  • Zeeshan Shabbir
    Zeeshan Shabbir over 7 years
    Those aren't the best ways either.
  • Zeeshan Shabbir
    Zeeshan Shabbir over 7 years
    bignerdranch.com/blog/splash-screens-the-right-way this guy has shown the best way.
  • Zar E Ahmer
    Zar E Ahmer over 7 years
    I have read that article before but it didn't provide any delay and splash doesn't work as it should be.
  • Zeeshan Shabbir
    Zeeshan Shabbir over 7 years
    that's the actual technique. You should check the splash of Maps or Youtube app. They are using this kind of technique.
  • Zeeshan Shabbir
    Zeeshan Shabbir over 7 years
    oh i see you work at BoardPeak :D . how can i approach you? email if possible please
  • Zar E Ahmer
    Zar E Ahmer over 7 years
    Yes sure, here you go [email protected] .How may I help you?
  • Zeeshan Shabbir
    Zeeshan Shabbir over 7 years
    I just e-mailed you.
  • Rat-a-tat-a-tat Ratatouille
    Rat-a-tat-a-tat Ratatouille about 5 years
    @nizam.sp: well if u have a better way why not post your answer? Instead of just negating this solution, or whoever it did.
  • Ahmad Vatani
    Ahmad Vatani almost 4 years
    Check my optimal and easy solution: medium.com/@vatani.ahmad/…