Android: La pantalla de inicio no se muestra, ¿por qué?

Estoy trabajando en aprender Android. De los documentos que he leído hasta ahora no puedo averiguar cómo obtener la vista de bienvenida para mostrar (durante el sueño la pantalla permanece en blanco). Parece que necesito comenzar una nueva actividad para el diseño principal, pero esto parece desperdiciador (el chapoteo debe estar para siempre ido, yo quisiera reutilizar su hilo).

import android.app.Activity; import android.os.Bundle; import android.util.Log; public class Ext3 extends Activity { public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.splash); Log.v("Ext3", "starting to sleep"); try { Thread.sleep (5000); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } Log.v("Ext3", "done sleeping"); setContentView (R.layout.main); } } 

4 Solutions collect form web for “Android: La pantalla de inicio no se muestra, ¿por qué?”

Creo que su pantalla de bienvenida nunca se muestra porque nunca le da el hilo de la interfaz de usuario (que está en) la oportunidad de dibujar ya que sólo dormir allí no hacer nada.

En lugar de Thread.sleep, te sugiero que mires en un temporizador o algo así para programar la actualización y cambiar el contenido de su vista; Una alternativa sería iniciar un AsyncTask donde podría dormir antes de cambiar la vista como lo está haciendo ahora.

No duerma ni bloquee de ninguna otra manera el hilo de la interfaz de usuario, eso es malo … (causa ANR)

Cuando llamas a sleep así, estás bloqueando el hilo de la interfaz de usuario. En su lugar, ponga la segunda llamada a setContentView en un Runnable , cree un manejador y utilice el método postDelayed del postDelayed para ejecutar Runnable. Algo como esto:

 public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.splash); Runnable endSplash = new Runnable() { @Override public void run() { setContentView (R.layout.main); } } new Handler().postDelayed(endSplash, 5000L); } 

He intentado este código en mi aplicación y su funcionamiento perfectamente. Puede ser que le ayudará.

 public class SplashScreen extends Activity { /** * The thread to process splash screen events */ private Thread mSplashThread; /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // Splash screen view setContentView(R.layout.splash); final SplashScreen sPlashScreen = this; // The thread to wait for splash screen events mSplashThread = new Thread() { @Override public void run() { try { synchronized (this) { // Wait given period of time or exit on touch wait(5000); } } catch (InterruptedException ex) { } finish(); // Run next activity Intent intent = new Intent(); intent.setClass(sPlashScreen, MainActivity.class); startActivity(intent); stop(); } }; mSplashThread.start(); } @Override public boolean onCreateOptionsMenu(Menu menu) { super.onCreateOptionsMenu(menu); return false; } /** * Processes splash screen touch events */ @Override public boolean onTouchEvent(MotionEvent evt) { if (evt.getAction() == MotionEvent.ACTION_DOWN) { synchronized (mSplashThread) { mSplashThread.notifyAll(); } } return true; } } 

Este es el fragmento de una pantalla de bienvenida básica

 public class Splash extends Activity { //private ProgressDialog pd = null; private final int SPLASH_DISPLAY_LENGTH = 3000; /** Called when the activity is first created. */ @Override public void onCreate(Bundle icicle) { super.onCreate(icicle); setContentView(R.layout.splashscreen); //this.pd = ProgressDialog.show(this, "Initializing..", "Initializing Infraline...", true, false); /* New Handler to start the InfralineTabWidget-Activity * and close this Splash-Screen after some seconds.*/ new Handler().postDelayed(new Runnable(){ @Override public void run() { /* Create an Intent that will start the InfralineTabWidget-Activity. */ Intent mainIntent = new Intent(Splash.this,InfralineTabWidget.class); Splash.this.startActivity(mainIntent); Splash.this.finish(); } }, SPLASH_DISPLAY_LENGTH); } } 

Y en tu AndroidManifest.xml poner

  <activity android:name=".Splash" android:theme="@android:style/Theme.NoTitleBar" android:configChanges="orientation|keyboardHidden"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> 

Espero que esto funcione para usted 🙂

FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.