4

SplashScreenActivity電話でアプリケーションを起動すると、約0.5秒間白い画面が表示されるという問題があります。MainActitivyextendsFragmentActivityAndroidManifestIでは、ランチャーとして宣言し、ポート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:

 <?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>
4

3 に答える 3

1

AsyncTaskで次の2つのアクションを実行する必要があります。

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

doInBackground-methodに入れsetContentView、postExecuteメソッドに実行しますrandomSplash

于 2013-02-25T13:27:32.967 に答える
1

AndroidManifest.xml ファイルの SplashActivity テーマをこれに変更します。

android:theme="@android:style/Theme.Translucent.NoTitleBar"
于 2016-06-07T19:01:00.383 に答える
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();

これはUIスレッドがスリープする問題であり、代わりにハンドラーを使用するのはあまり良い考えではなく、例外も発生する可能性があると思います。

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);
    }
于 2013-02-25T13:08:39.457 に答える