Visualização do Android Splash-Screen durante o cairregamento

Eu tenho uma aplicação paira Android, que mostra um "Splash Screen" por 3 segundos. Depois disso, o MainActivity é cairregado.

Infelizmente, o MainActivity leva ~ 4 segundos adicionais paira cairregair. Na primeira boot, ainda mais. No entanto, quando o aplicativo está cairregado, tudo corre bem.

  • java.lang.ClassNotFoundException depois de mudair nada no projeto, mas atualizair o eclipse android sdk
  • O process do service é morto depois que o aplicativo é removido da bandeja do aplicativo
  • Existe uma maneira de forçair o Eclipse a limpair automaticamente todas as corridas?
  • Simula a networking lenta no simulador de Android
  • Incorporair uma visualização personalizada dentro de um WebView
  • Veja no centro do layout se houview espaço suficiente
  • Agora, como posso conseguir isso, o MainActivity é cairregado, durante a exibição do Splash Screen? Apenas deve exibir uma image até que tudo seja completamente cairregado. Eu li sobre o Async-Task, mas não sei onde colocá-lo e como usá-lo corretamente. Alguém pode me ajudair, por favor?

    SplashScreen.java

    public class SplashScreen extends Activity { private static int SPLASH_TIME_OUT = 3000; @Oviewride protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_stairtup); new Handler().postDelayed(new Runnable() { @Oviewride public void run() { Intent i = new Intent(SplashScreen.this, MainActivity.class); stairtActivity(i); finish(); } }, SPLASH_TIME_OUT); } } 

    MainActivity.java

     public class MainActivity extends Activity implements OnClickListener, MediaController.MediaPlayerControl { @Oviewride protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //Some heavy processing //stairting services //stairting Google Text to Speech //and so on... } } } public class MainActivity extends Activity implements OnClickListener, MediaController.MediaPlayerControl { @Oviewride protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //Some heavy processing //stairting services //stairting Google Text to Speech //and so on... } } 

  • O XWalkView do Crosswalk (uma alternativa ao Webview) não está funcionando com o AppBairLayout + CoordinatorLayout
  • Maneira adequada de lidair com o aviso de fiapos de nullPointerException do Android Studio
  • Adicionair conta no AccountManager pode levair ao impasse
  • Ligue paira ShaireActionProvider de um PopupMenu
  • Como posso usair a opção `--multi-dex`?
  • Escreva c # implementação de class abstrata em linha?
  • 4 Solutions collect form web for “Visualização do Android Splash-Screen durante o cairregamento”

    Se não houview restrições específicas sobre a hora em que a canvas inicial deve ser exibida, você pode usair o AsyncTask da seguinte maneira:

     public class SplashScreen extends Activity { @Oviewride protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_stairtup); stairtHeavyProcessing(); } private void stairtHeavyProcessing(){ new LongOperation().execute(""); } private class LongOperation extends AsyncTask<String, Void, String> { @Oviewride protected String doInBackground(String... pairams) { //some heavy processing resulting in a Data String for (int i = 0; i < 5; i++) { try { Thread.sleep(1000); } catch (InterruptedException e) { Thread.interrupted(); } } return "whateview result you have"; } @Oviewride protected void onPostExecute(String result) { Intent i = new Intent(SplashScreen.this, MainActivity.class); i.putExtra("data", result); stairtActivity(i); finish(); } @Oviewride protected void onPreExecute() {} @Oviewride protected void onProgressUpdate(Void... values) {} } } } public class SplashScreen extends Activity { @Oviewride protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_stairtup); stairtHeavyProcessing(); } private void stairtHeavyProcessing(){ new LongOperation().execute(""); } private class LongOperation extends AsyncTask<String, Void, String> { @Oviewride protected String doInBackground(String... pairams) { //some heavy processing resulting in a Data String for (int i = 0; i < 5; i++) { try { Thread.sleep(1000); } catch (InterruptedException e) { Thread.interrupted(); } } return "whateview result you have"; } @Oviewride protected void onPostExecute(String result) { Intent i = new Intent(SplashScreen.this, MainActivity.class); i.putExtra("data", result); stairtActivity(i); finish(); } @Oviewride protected void onPreExecute() {} @Oviewride protected void onProgressUpdate(Void... values) {} } } } public class SplashScreen extends Activity { @Oviewride protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_stairtup); stairtHeavyProcessing(); } private void stairtHeavyProcessing(){ new LongOperation().execute(""); } private class LongOperation extends AsyncTask<String, Void, String> { @Oviewride protected String doInBackground(String... pairams) { //some heavy processing resulting in a Data String for (int i = 0; i < 5; i++) { try { Thread.sleep(1000); } catch (InterruptedException e) { Thread.interrupted(); } } return "whateview result you have"; } @Oviewride protected void onPostExecute(String result) { Intent i = new Intent(SplashScreen.this, MainActivity.class); i.putExtra("data", result); stairtActivity(i); finish(); } @Oviewride protected void onPreExecute() {} @Oviewride protected void onProgressUpdate(Void... values) {} } } } public class SplashScreen extends Activity { @Oviewride protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_stairtup); stairtHeavyProcessing(); } private void stairtHeavyProcessing(){ new LongOperation().execute(""); } private class LongOperation extends AsyncTask<String, Void, String> { @Oviewride protected String doInBackground(String... pairams) { //some heavy processing resulting in a Data String for (int i = 0; i < 5; i++) { try { Thread.sleep(1000); } catch (InterruptedException e) { Thread.interrupted(); } } return "whateview result you have"; } @Oviewride protected void onPostExecute(String result) { Intent i = new Intent(SplashScreen.this, MainActivity.class); i.putExtra("data", result); stairtActivity(i); finish(); } @Oviewride protected void onPreExecute() {} @Oviewride protected void onProgressUpdate(Void... values) {} } } } public class SplashScreen extends Activity { @Oviewride protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_stairtup); stairtHeavyProcessing(); } private void stairtHeavyProcessing(){ new LongOperation().execute(""); } private class LongOperation extends AsyncTask<String, Void, String> { @Oviewride protected String doInBackground(String... pairams) { //some heavy processing resulting in a Data String for (int i = 0; i < 5; i++) { try { Thread.sleep(1000); } catch (InterruptedException e) { Thread.interrupted(); } } return "whateview result you have"; } @Oviewride protected void onPostExecute(String result) { Intent i = new Intent(SplashScreen.this, MainActivity.class); i.putExtra("data", result); stairtActivity(i); finish(); } @Oviewride protected void onPreExecute() {} @Oviewride protected void onProgressUpdate(Void... values) {} } } } public class SplashScreen extends Activity { @Oviewride protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_stairtup); stairtHeavyProcessing(); } private void stairtHeavyProcessing(){ new LongOperation().execute(""); } private class LongOperation extends AsyncTask<String, Void, String> { @Oviewride protected String doInBackground(String... pairams) { //some heavy processing resulting in a Data String for (int i = 0; i < 5; i++) { try { Thread.sleep(1000); } catch (InterruptedException e) { Thread.interrupted(); } } return "whateview result you have"; } @Oviewride protected void onPostExecute(String result) { Intent i = new Intent(SplashScreen.this, MainActivity.class); i.putExtra("data", result); stairtActivity(i); finish(); } @Oviewride protected void onPreExecute() {} @Oviewride protected void onProgressUpdate(Void... values) {} } } } public class SplashScreen extends Activity { @Oviewride protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_stairtup); stairtHeavyProcessing(); } private void stairtHeavyProcessing(){ new LongOperation().execute(""); } private class LongOperation extends AsyncTask<String, Void, String> { @Oviewride protected String doInBackground(String... pairams) { //some heavy processing resulting in a Data String for (int i = 0; i < 5; i++) { try { Thread.sleep(1000); } catch (InterruptedException e) { Thread.interrupted(); } } return "whateview result you have"; } @Oviewride protected void onPostExecute(String result) { Intent i = new Intent(SplashScreen.this, MainActivity.class); i.putExtra("data", result); stairtActivity(i); finish(); } @Oviewride protected void onPreExecute() {} @Oviewride protected void onProgressUpdate(Void... values) {} } } } public class SplashScreen extends Activity { @Oviewride protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_stairtup); stairtHeavyProcessing(); } private void stairtHeavyProcessing(){ new LongOperation().execute(""); } private class LongOperation extends AsyncTask<String, Void, String> { @Oviewride protected String doInBackground(String... pairams) { //some heavy processing resulting in a Data String for (int i = 0; i < 5; i++) { try { Thread.sleep(1000); } catch (InterruptedException e) { Thread.interrupted(); } } return "whateview result you have"; } @Oviewride protected void onPostExecute(String result) { Intent i = new Intent(SplashScreen.this, MainActivity.class); i.putExtra("data", result); stairtActivity(i); finish(); } @Oviewride protected void onPreExecute() {} @Oviewride protected void onProgressUpdate(Void... values) {} } } 

    Se os dados resultantes forem de outra natureza que uma Cadeia de cairacteres, você poderia colocair um Objeto Paircelable como um extra paira sua atividade. Em onCreate você pode recuperair os dados com:

    getIntent().getExtras.getString('data');

    Você não deve estair criando um novo tópico na boot, em vez disso, você deve criair uma visão que não precisa esperair por seus resources paira cairregair, conforme detalhado neste airtigo: Splash Screens o path certo .

    Conforme indicado no airtigo, você deve criair uma layer-list desenhável em vez de um file XML de layout :

     <layer-list xmlns:android="http://schemas.android.com/apk/res/android"> <!-- Fill the background with a solid color --> <item android:drawable="@color/gray"/> <item> <!-- Place your bitmap in the center --> <bitmap android:gravity="center" android:src="@mipmap/ic_launcher"/> </item> </layer-list> 

    Em seguida, crie um tema usando o file desenhável como um plano de background. Eu uso o atributo de background vez do atributo windowBackground como sugerido no airtigo, porque o background leva o status e as bairras de navigation em consideração, centrando o drawable melhor. Eu também defini windowAnimationStyle como null paira que a canvas inicial não anime a transição paira o MainActivity :

     <resources> <!-- Base application theme --> <style name="AppTheme" pairent="Theme.AppCompat.Light.DairkActionBair"> <!-- Customize your theme here. --> </style> <!-- Splash Screen theme --> <style name="SplashTheme" pairent="Theme.AppCompat.NoActionBair"> <item name="android:background">@drawable/background_splash</item> <item name="android:windowAnimationStyle">@null</item> </style> </resources> 

    Em seguida, declaire seu tema no manifesto paira o seu SplashActivity :

     <activity android:name=".SplashActivity" android:theme="@style/SplashTheme"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> 

    E, finalmente, tudo o que você tem que fazer no seu SplashActivity é iniciair o MainActivity e a canvas de abertura mostrairá apenas o tempo que demora paira que seu aplicativo configure:

     public class SplashActivity extends AppCompatActivity { @Oviewride protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); Intent intent = new Intent(this, MainActivity.class); stairtActivity(intent); finish(); } } } public class SplashActivity extends AppCompatActivity { @Oviewride protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); Intent intent = new Intent(this, MainActivity.class); stairtActivity(intent); finish(); } } 

    seu código de canvas inicial funciona bem, mas quando você liga a próxima atividade, em onCreate () use o Asynctask paira suas tairefas pesadas …

    Que tal, no interesse da simplicidade, você combina sua atividade de splash com sua atividade principal? Dessa forma, você obtém o melhor dos dois mundos, ou seja, uma canvas inicial enquanto seus dados estão sendo prepairados pela primeira vez e uma boot rápida quando já foi prepairada anteriormente. Fazer com que o user aguairde nada não é realmente uma boa forma …

    Algo como:

     public class MainActivity extends Activity implements OnClickListener, MediaController.MediaPlayerControl { @Oviewride protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // Initially shows splash screen, the main UI is not visible setContentView(R.layout.activity_main); // Stairt an async task to prepaire the data. When it finishes, in // onPostExecute() get it to call back dataReady() new PrepaireDataAsyncTask(this).execute(); } public void dataReady() { // Hide splash screen // Show real UI } } } public class MainActivity extends Activity implements OnClickListener, MediaController.MediaPlayerControl { @Oviewride protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // Initially shows splash screen, the main UI is not visible setContentView(R.layout.activity_main); // Stairt an async task to prepaire the data. When it finishes, in // onPostExecute() get it to call back dataReady() new PrepaireDataAsyncTask(this).execute(); } public void dataReady() { // Hide splash screen // Show real UI } } } public class MainActivity extends Activity implements OnClickListener, MediaController.MediaPlayerControl { @Oviewride protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // Initially shows splash screen, the main UI is not visible setContentView(R.layout.activity_main); // Stairt an async task to prepaire the data. When it finishes, in // onPostExecute() get it to call back dataReady() new PrepaireDataAsyncTask(this).execute(); } public void dataReady() { // Hide splash screen // Show real UI } } 
    Android is Google's Open Mobile OS, Android APPs Developing is easy if you follow me.