2013-11-09 7 views
0

내 앱의 나머지가로드되는 동안 나타나는 스플래시 화면 인 스레드를 만들려고하지만 스플래시 활동이 2 초 후에 사라지지 않습니다. 왜 그런가요?스플래시 화면이 사라지지 않음

여기 내 스플래쉬 활동 클래스입니다 :

imports ... 

public class Splash extends Activity implements Runnable { 

    @Override 
    protected void onCreate(Bundle tokenArg) { 
     super.onCreate(tokenArg); 
     setContentView(R.layout.splash); 

     Thread splashing = new Thread(); 
     splashing.start(); 

    } 

    @Override 
    public void run() { 
     try { 
      Thread.sleep(2000); 
      startActivity(new Intent(Splash.this, Home.class)); 
     } 
     catch(Exception excpt) { 
      AlertDialog alert = new AlertDialog.Builder(this).create(); 
      alert.setTitle("Error"); 
      alert.setMessage("App is going to close"); 
     } 
     finally { 
      this.finish(); 
     } 
    } 
} 

그리고 이것은 .Home 활동 클래스입니다 :

public class Home extends Activity { 

    @Override 
    protected void onCreate(Bundle tokenArg) { 
     super.onCreate(tokenArg); 
     setContentView(R.layout.activity_home); 
    } 

    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     getMenuInflater().inflate(R.menu.home, menu); 
     return true; 
    } 
} 

모두가 XML을 해당 그리고 그것은 그들과 함께 모든 좋은있다. (개별적으로 테스트했습니다)

미리 감사드립니다.

답변

1

스레드가 실행되면이 코드를 사용하여 활동을 시작하십시오.

new Handler().postDelayed(new Runnable(){ 
       public void run() { 
        Intent mainIntent = new Intent(Splash.this, Home.class) 
          .addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP) 
          .addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP); 
        Splash.this.startActivity(mainIntent); 

        Splash.this.finish(); 
       } 
      }, 2000); 
0

이 코드를 사용해보십시오. 그것은 꽤 많은 사용 사례를 처리하고 사용자의 뒤로 버튼과 많은 다른 유스 케이스를 잘 처리 할 것입니다.

public class SplashBranding extends Activity { 

    private Handler mHandler; 
    private static final long TWO_SECOND_IN_MS = 2000; 

    @Override 
    protected void onCreate(Bundle bundle) { 
     super.onCreate(bundle); 
     mHandler = new ShowHomeHandler(); 
     setContentView(R.layout.splash); 
    } 

    @Override 
    protected void onResume() { 
     super.onResume(); 
     mHandler.sendEmptyMessageDelayed(0, TWO_SECOND_IN_MS); 
    } 

    @Override 
    protected void onPause() { 
     super.onPause(); 
     // In case system dialogs appear and this method is called, we shouldn't show Home. 
     if(!isFinishing()) 
      mHandler.removeMessages(0); 
    } 

    @Override 
    protected void onStop() { 
     super.onStop(); 
     // In case a call is received and this method is called, we shouldn't show Home. 
     if(!isFinishing()) 
      mHandler.removeMessages(0); 
    } 

    @Override 
    public void onBackPressed() { 
     super.onBackPressed(); 
     // In case user pressed back, we shouldn't show Home. 
     mHandler.removeMessages(0); 
    } 

    /** 
    * Shows the Home Activity. 
    */ 
    private void showHome() { 
     Intent i = new Intent(this, Home.class); 
     startActivity(i); 
     finish(); 
    } 

    private class ShowHomeHandler extends Handler { 

     @Override 
     public void handleMessage(Message msg) { 
      super.handleMessage(msg); 

      switch (msg.what) { 
      case 0: 
       showHome(); 
       break; 
      default: 
       break; 
      } 
     } 
    } 

} 
2

스레드를 인스턴스화하는 동안 runnable을 매개 변수로 Thread 생성자에 전달하지 않았습니다. Splash.class의 Runnable 인터페이스를 구현하면 현재 객체를 매개 변수로 전달합니다.

Thread splashing = new Thread(this); 
splashing.start(); 

희망이 도움이되었습니다.

0

new Thread();의 수업을 통과하지 않은 것 같습니다. 이 값을 new Thread(this);으로 변경해야합니다.

0

이 간단한 코드를 시도 할 수 있습니다 ..

@Override 

protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    *// activity_splay is the name of splash .xml file* 
    setContentView(R.layout.activity_splash); 
    Thread thread = new Thread(){ 
     @Override 
     public void run(){ 
      try{ 
       // splash screen would disappear after 1500 ms i.e 1.5 sec 
       sleep(1500); <br/> 
     // MainActivity is the name of activity that would appear after splash screen 
     startActivity(new Intent(getApplicationContext(), MainActivity.class)); 
      } 
      catch (InterruptedException e){ 
       e.printStackTrace(); 
      } 
     } 
    }; 
    thread.start(); 
} 
//hopefully it would help:)