2013-02-25 2 views
4

SplashScreenActivity에 문제가 있습니다. 휴대 전화에서 응용 프로그램을 시작하면 약 0.5 초 동안 흰색 화면이 표시됩니다. MainActitivyFragmentActivity으로 확장되고 AndroidManifest에는 SplashScreenActivity이 런처로, 세로 모드는 screenOrientation으로 선언됩니다.스플래시 화면 앞에 흰색 화면이 있습니다

코드 :

public class SplashScreenActivity extends Activity { 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    requestWindowFeature(Window.FEATURE_NO_TITLE); 
    setContentView(R.layout.splashscreen); 
    randomSplash(); 

    Thread splashscreen = new Thread() { 

     public void run() { 
      try { 
       Thread.sleep(1000); 
       Intent mainScreen = new Intent("com.rm.jkrm.MAINACTIVITY"); 
       startActivity(mainScreen); 
      } catch (InterruptedException e) { 

      } finally { 
       finish(); 
      } 
     } 
    }; 
    splashscreen.start(); 
} 

private void randomSplash(){ 
    Random random = new Random(); 
    int i = random.nextInt(4); 

    LinearLayout ln = (LinearLayout) findViewById(R.id.splashscreen); 

    switch(i){ 
    case 1: 
     ln.setBackgroundResource(R.drawable.splash1); 
     break; 
    case 2: 
     ln.setBackgroundResource(R.drawable.splash2); 
     break; 
    case 3: 
     ln.setBackgroundResource(R.drawable.splash3); 
     break; 
    default: 
     ln.setBackgroundResource(R.drawable.splash0); 
     break; 
    } 
} 
} 

XML :이 내가 생각하는 대신 을 아주 좋은 아이디어를 사용 핸들러를 잠을 잘 수있는 문제의 UI 스레드가

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:id="@+id/splashscreen" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:orientation="vertical"> 
</LinearLayout> 
+0

MAINACTIVITY의 주요 스레드에서 과중한 작업을 수행하고 있습니까? –

+3

아마도'R.drawable.splashXXX' 리소스가 매우 커서로드하는 데 많은 시간이 걸릴 것입니다. –

+0

@vmironov에 동의합니다 – moDev

답변

1
Thread splashscreen = new Thread() { 

     public void run() { 
      try { 
       Thread.sleep(1000); 
       Intent mainScreen = new Intent("com.rm.jkrm.MAINACTIVITY"); 
       startActivity(mainScreen); 
      } catch (InterruptedException e) { 

      } finally { 
       finish(); 
      } 
     } 
    }; 
    splashscreen.start(); 

입니다 예외가 발생할 수도 있습니다.

Handler h=new Handler(); 
     h.postDelayed(new Runnable() { 

      public void run() { 
       // TODO Auto-generated method stub 
       startActivity(new Intent(Splash_Activity.this,Main_Activity.class)); 
       finish(); 
      } 
     }, 2000); 
    } 
+0

동일한 문제가 발생하지만, 문제가 있습니다. – ronaldm

1

당신은 AsyncTask를이 두 가지 작업을 실행해야합니다

setContentView(R.layout.splashscreen); 
randomSplash(); 

는 doInBackground 메소드에 당신이 randomSplash를 실행 postExecute 방법에 setContentView을 넣어.

1

AndroidManifest.xml 파일의 SplashActivity 테마를 this로 변경하십시오.

android:theme="@android:style/Theme.Translucent.NoTitleBar" 
관련 문제