2017-07-21 1 views
-3

J'ai écrit le même code pour la première version de mon application et cela a bien fonctionné. Plus tard, j'ai changé pour le modèle d'application de tiroir de barre latérale et cela ne fonctionne pas. Quel pourrait être le problème? Merci d'avance. Ce est le code pour le fichier SpashScreen.java:mon écran de démarrage s'ouvre, puis l'application se bloque

public class SplashScreen extends AppCompatActivity { 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_splash_screen); 
    Thread myThread = new Thread(){ 
     @Override 
     public void run(){ 
      try { 
       sleep(3000); 
       Intent intent = new Intent(getApplicationContext(), MainActivity.class); 
       startActivity(intent); 
       finish(); 
      } catch (InterruptedException e) { 
       e.printStackTrace(); 
      } 
     } 
    }; 
    myThread.start(); 
} 

}

Ceci est le manifeste:

<?xml version="1.0" encoding="utf-8"?> 

<application 
    android:allowBackup="true" 
    android:icon="@mipmap/ic_launcher" 
    android:label="@string/example" 
    android:supportsRtl="true" 
    android:theme="@style/AppTheme"> 
    <activity 
     android:name=".SplashScreen" 
     android:label="@string/example" 
     android:theme="@style/AppTheme.NoActionBar"> 
     <intent-filter> 
      <action android:name="android.intent.action.MAIN" /> 

      <category android:name="android.intent.category.LAUNCHER" /> 
     </intent-filter> 
    </activity> 
    <activity android:name=".MainActivity"></activity> 
</application> 

+1

journal post erreur ici – akhilesh0707

+0

essayez d'utiliser 'SplashScreen.this' en place de' getApplicationContext() ' –

+0

@AkhileshPatil Malheureusement, aucune erreur n'apparaît, il compile puis charge l'écran de démarrage pour le moment que j'ai sélectionné, puis il se bloque, affichant le message" L'application est arrêtée " –

Répondre

1

essayer ce

new Handler().postDelayed(new Runnable() { 

     /* 
     * Showing splash screen with a timer. This will be useful when you 
     * want to show case your app logo/company 
     */ 

     @Override 
     public void run() { 
      // This method will be executed once the timer is over 
      // Start your app main activity 
      Intent i = new Intent(SplashScreen.this, MainActivity.class); 
      startActivity(i); 

      // close this activity 
      finish(); 
     } 
    }, 3000);// time in milliseconds 
+0

Merci, où dois-je écrire ce code? J'ai collé seulement ce segment dans ma classe SplashScree.java et il y avait beaucoup d'erreurs –

+0

Utilisez finish() n'est pas bien la solution parce que dans le futur, vous devrez peut-être ajouter une animation, (Cette solution créera un problème), Use Intention le drapeau pour fermer l'activité. –

0

Essayez ceci pourrait aider

new Handler().postDelayed(new Runnable() { 
     @Override 
     public void run() { 
      Intent intent = new Intent(SplashActivity.this, MainActivity.class); 
      startActivity(intent); 
      finish(); 
     } 
    }, 3000); 
+0

Exactement où devrais-je écrire ceci? Merci –

+0

À l'intérieur de vous surCréer la méthode – akhilesh0707

0

Essayez d'utiliser:

new Handler().postDelayed(new Runnable() { 
     @Override 
     public void run() { 
      Intent intent = new Intent(SplashScreen.this, MainActivity.class); 
      intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NEW_TASK); 
      startActivity(intent); 
     } 
    }, 3000); 

Ce code ne crée pas nouveau thread, post-scriptum Android ne peut pas démarrer l'activité à partir d'un autre thread (uniquement l'interface utilisateur de formulaire)

0

startActivity() doit être exécuté dans main thread. L'utilisation postDelay() de Hanlder classe

Handler handler = new Handler(); 
    handler.postDelayed(new Runnable() { 
     @Override 
     public void run() { 
      Intent i = new Intent(SplashScreen.this, MainActivity.class); 
      startActivity(i); 
      finish(); 
     } 
    }, 3000); 
+0

alors je devrais mettre ce fragment de code dans ma MainActivity? –

+0

Dans votre méthode onCreate. Lisez ceci pour comprendre comment travailler avec le processus et le thead: https: //developer.android.com/guide/components/processes-and-threads.html? Hl = vi –

+0

Merci beaucoup pour le lien. J'ai mis le code dans la méthode onCreate mais maintenant il se bloque avant même d'afficher l'écran de démarrage, merci quand même –

0

à l'aide gestionnaire peut résoudre ce faire ci-dessous le code, il travaillera pour vous

handler.postDelayed(
      new Runnable() { 
       public void run() { 
        Intent intent = new Intent(youractivity.this, MainActivity.class); 
      startActivity(intent); 
       } 
      }, 3000);