How-To: Splash Screen

Man sollte meinen, dass es hierzu bereits genug Anleitungen im Netz gibt. Leider ist das meiste davon nicht wirklich zu gebrauchen und unglaublich kompliziert. Häufig wird Code von anderen Platformen wiederverwendet, der in Android eigentlich nichts zu suchen hat, während Androids Hausmittel vollständig ignoriert werden.

Das Elegante an dieser Lösung ist, dass man keine Ahnung von Threads haben muss. Statt eigene Threads zu erstellen und sich um Race-Conditions sorgen machen zu müssen, benutzt dieser Code den von jeder Android-App vorgehaltenen Message-Handler, der auf dem UI-Thread läuft. Es kann daher zu keinem Konflikt zwischen dem ablaufenden Timer und einem Click-Event kommen.

public class Startup extends Activity implements Runnable, OnClickListener {
	private static final int SPLASH_DELAY = 3000;
	private boolean once = false;
	private Handler handler = new Handler();

	@Override
	public void onClick(View v) {
		run();
	}

	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.startup);
		findViewById(R.id.StartupLayout).setOnClickListener(this);
	}

	@Override
	protected void onStart() {
		super.onStart();
		handler.postDelayed(this, SPLASH_DELAY);
	}

	@Override
	protected void onStop() {
		super.onStop();
		handler.removeCallbacks(this);
	}

	@Override
	public void run() {
		if (once) {
			return;
		}
		once = true;
		finish();
		startActivity(new Intent(this, MainEntry.class));
	}
}

Der Quelltext ist CC BY 3.0 by Volker Kamin

Der Splash-Screen wartet für 3000 Millisekunden oder bis man auf den Bildschirm tippt und startet dann die Activity MainEntry. Wird der Splash-Screen unterbrochen (Anruf, etc.) oder das Display gedreht, fangen die 3 Sekunden von vorne an, sobald der Splash-Screen wieder sichtbar wird.

Weiterlesen