2017-06-02 4 views
0

Im Wesentlichen habe ich eine runnable Wechsel zwischen zwei Aktivitäten. Ich habe einen Timer in onCreate runnable, der auf 0 Millisekunden in der Hauptaktivität gesetzt wird, die sofort auf den Startbildschirm umschaltet. Der Splash-Screen ist einfach ein Imageview, das dann nach 3000 Millisekunden mit einem ähnlichen Runnable wieder zurück schaltet.Wie vereinfache ich diesen Java-Begrüßungsbildschirm?

Meine Fragen ist das; kann ich den Code für die Hauptaktivität vereinfachen, und brauche ich wirklich die .postdelayed, wenn ich SplashScreen.activity sofort laden möchte?

Wenn die Verzögerung nicht notwendig ist, wie würde ich es richtig loswerden, damit die App sofort den Splashscreen lädt?

Die Haupttätigkeit:

 /* 
     SPLASH SCREEN 
     */ 

     splashScreenRun = settings.getBoolean("splashScreenRun", splashScreenRun); 

     if (splashScreenRun == true) { 

      settings.edit().putBoolean("splashScreenRun", false).commit(); 

      new Handler().postDelayed(new Runnable() { 
       @Override 
       public void run() { 

        Intent splashIntent = new Intent(MainActivity.this, SplashActivity.class); 
        startActivity(splashIntent); 
        finish(); 

       } 

      },0); 

     } 
     else { 

      settings.edit().putBoolean("splashScreenRun", true).commit(); 

     } 

     //END 

Und dann der Splashscreen:

@Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_splash); 

     //splash screen 
     new Handler().postDelayed(new Runnable(){ 
      @Override 
      public void run(){ 

       Intent splashEndIntent = new Intent(SplashActivity.this, MainActivity.class); 
       startActivity(splashEndIntent); 
       finish(); 

      } 

     },splashTimeout); 
     //end splash screen 
+0

können Sie onStart() dafür verwenden und es ist nicht notwendig, postdelayed zu verwenden. –

Antwort

0

Zunächst einmal verwenden nie anonyme Handler. Verwenden Sie ein Handler-Objekt.

Handler handler = new Handler(); 
    runnable = new Runnable() { 
    @Override 
    public void run() {  
     startActivity(new 
     Intent(SplashActivity.this, MainActivity.class));        
     overridePendingTransition(R.anim.right_in, R.anim.right_out);           
     finish();        
     }}; 
    handler.postDelayed(runnable, 3000); 

Und auf

@Override 
protected void onDestroy() { 
    super.onDestroy(); 
    handler.removeCallbacks(runnable); 
} 

zerstören Dies verhindert, dass die App von stürzt ab, wenn der Benutzer die App direkt vom Task-Manager schließen.

OR

sollten Sie verwenden

runOnUiThread(new Runnable() { 
        @Override 
        public void run() { 
        //Do your stuff here. 
        } 
       }); 

Hoffnung, das hilft.