This question already has an answer here:
- How do I make a splash screen? 31 answers
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.
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.Easy way to do it..
splash.xml if you want to show a image
Note if you want to do some UI operation in splash .Then you have to create a handler and update UI in it.
make a splash screen like this:
Hope it helps!
EDIT: Anotehr way to make a splash would be like this: