2010-02-08 14 views
18

Tengo una aplicación simple, comienza, carga xml feed desde la red, puede buscar una lista de noticias y luego leer los detalles de una noticia elegida. Lo que me gustaría hacer es tener una pantalla de bienvenida, lo que significa que tan pronto como haga clic en la aplicación, debería mostrar una imagen (nombre de la aplicación en mi caso) y luego mostrar la lista de noticias solo después de que se hayan cargado.¿Cómo hacer una pantalla de bienvenida (pantalla visible cuando se inicia la aplicación)?

Leo sobre problemas similares (creo) y la gente dice usar FrameLayout, pero realmente no puedo resolverlo. No estoy seguro de si esto puede hacerse en la primera actividad que se inicia, tal vez debería mostrar esta imagen de bienvenida en una sola actividad y solo entonces llamar a la actividad que muestra mi lista de noticias.

sé que en el iPhone se puede configurar la pantalla de bienvenida en la configuración de la aplicación mientras se desarrolla, sería bueno tener esta funcionalidad en el manifiesto de aplicación del androide ...

+4

Sabe que una pantalla de bienvenida no ayuda con nada pero hace que su aplicación se inicie aún más lentamente ... no las use. – Johan

+0

Creo que sus desventajas superan con creces los beneficios que obtendría de una pantalla de bienvenida. –

+21

No veo ninguna desventaja, en lugar de mirar una pantalla en negro durante 2 o 3 segundos (o más), está viendo una imagen, mucho más agradable en mi opinión, al menos usted sabe que la aplicación comenzó. – pambuk

Respuesta

35

Android sugiere tomar ventaja de utilizar una pantalla de bienvenida al realizar largos cálculos en el arranque. Este es un extracto del sitio web para desarrolladores de Android: Diseño para la capacidad de respuesta:

"Si su aplicación tiene una fase de configuración inicial que consume mucho tiempo, considere mostrar una pantalla emergente o renderizar la vista principal lo más rápido posible y completar la información de manera asincrónica En cualquier caso, debe indicar de algún modo que se está progresando, para que el usuario no perciba que la aplicación está congelada ". - Sitio del desarrollador de Android

Puede crear una actividad que muestre un cuadro de diálogo de progreso mientras utiliza una AsyncTask para descargar el canal XML de la red, analizarlo, almacenarlo en un archivo db (si es necesario) y luego iniciar la actividad que muestra los canales de noticias. Cierre la Actividad de bienvenida llamando acabado()

Aquí hay un código esqueleto:


public class SplashScreen extends Activity{ 
    @Override 
    public void onCreate(Bundle savedInstanceState){ 
     super.onCreate(savedInstanceState); 
     // set the content view for your splash screen you defined in an xml file 
     setContentView(R.layout.splashscreen); 

     // perform other stuff you need to do 

     // execute your xml news feed loader 
     new AsyncLoadXMLFeed().execute(); 

    } 

    private class AsyncLoadXMLFeed extends AsyncTask<Void, Void, Void>{ 
     @Override 
     protected void onPreExecute(){ 
      // show your progress dialog 

     } 

     @Override 
     protected Void doInBackground(Void... voids){ 
      // load your xml feed asynchronously 
     } 

     @Override 
     protected void onPostExecute(Void params){ 
      // dismiss your dialog 
      // launch your News activity 
      Intent intent = new Intent(SplashScreen.this, News.class); 
      startActivity(intent); 

      // close this activity 
      finish(); 
     } 

    } 
} 

espero que ayude!

+1

Problema resuelto, gracias :) – pambuk

+1

Máximo :) gracias – Naruto

+0

Hola, ¿qué pasa si tengo varios feeds y me gustaría comenzar el segundo feed de carga DESPUÉS de que la primera alimentación se complete y se muestre en la primera actividad. ¿Cómo hago hilos simultáneos en este ejemplo? – Zac

1

Sé que esto es viejo, pero para aquellos de ustedes que todavía enfrentan este problema, puede utilizar este simple android-splash library para mostrar su pantalla de inicio.

SplashBuilder 
     .with(this, savedInstanceState) 
     .show(); 

Puede establecer SplashTask que se ejecutará mientras se muestra la pantalla de bienvenida.

Cuestiones relacionadas