Android:闪屏问题

Android:闪屏问题,android,android-activity,splash-screen,Android,Android Activity,Splash Screen,我使用以下代码创建了一个启动屏幕: public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); this.setContentView(R.layout.splash_layout); Thread splashThread = new Thread() { @Override public void run() {

我使用以下代码创建了一个启动屏幕:

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    this.setContentView(R.layout.splash_layout);

    Thread splashThread = new Thread() {
        @Override
        public void run() {
            try {
                int waited = 0;
                while (_active && (waited < _splashTime)) {
                    sleep(100);
                    if (_active) {
                        waited += 100;
                    }
                }
            } catch (InterruptedException e) {
                // do nothing
            } finally {
                _active = false;
                finish();
                startActivity(new Intent(SplashActivity.this, MyMainActivity.class));
            }
        }
    };

    splashThread.start();
}
public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
这个.setContentView(R.layout.splash_布局);
线程飞溅线程=新线程(){
@凌驾
公开募捐{
试一试{
int=0;
while(_active&&(waiting<_splashTime)){
睡眠(100);
如果(_活动){
平均值+=100;
}
}
}捕捉(中断异常e){
//无所事事
}最后{
_主动=假;
完成();
startActivity(新意图(SplashActivity.this、MyMainActivity.class));
}
}
};
splashtread.start();
}
在splash_布局中有一个图像视图,在splash屏幕出现一段时间后消失,然后MyMainActivity开始,问题是,在splash消失后,在MyMainActivity开始之前,我可以看到上一个屏幕(与我的应用程序无关,例如带有小部件的桌面或以前运行的应用程序),如何使转换流畅,以便启动屏幕直接进入MyMainActivity


谢谢

你能试试吗我不确定这是100%的工作,但试试可能会有帮助

protected int _splashTime = 3000;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.splash_layout);
    Handler handler = new Handler();
    handler.postDelayed(new Runnable() {
        public void run() {
            finish();
            startActivity(new Intent(SplashActivity.this, MyMainActivity.class));
        }
    }, _splashTime);
}

你能试试吗我不确定这是100%的工作,但试试可能会有帮助

protected int _splashTime = 3000;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.splash_layout);
    Handler handler = new Handler();
    handler.postDelayed(new Runnable() {
        public void run() {
            finish();
            startActivity(new Intent(SplashActivity.this, MyMainActivity.class));
        }
    }, _splashTime);
}

这里是一个最好的例子供您参考。

这里是一个最好的例子。

尝试在
startActivity()之后调用
finish()

尝试在
startActivity()之后调用
finish()
您可以尝试以下代码:1

public class MainActivity extends Activity {
    private ImageView splashImageView;
    boolean splashloading = false;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        splashImageView = new ImageView(this);
        splashImageView.setScaleType(ScaleType.FIT_XY);
        splashImageView.setImageResource(R.drawable.ic_launcher);
        setContentView(splashImageView);
        // interesting music
        /**
         * Gets your sound file from res/raw
         */
        splashloading = true;
        Handler h = new Handler();
        h.postDelayed(new Runnable() {
            public void run() {
                splashloading = false;
                setContentView(R.layout.activity_main);
            }

        }, 3000);

    }

祝你好运

您可以尝试以下代码:1

public class MainActivity extends Activity {
    private ImageView splashImageView;
    boolean splashloading = false;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        splashImageView = new ImageView(this);
        splashImageView.setScaleType(ScaleType.FIT_XY);
        splashImageView.setImageResource(R.drawable.ic_launcher);
        setContentView(splashImageView);
        // interesting music
        /**
         * Gets your sound file from res/raw
         */
        splashloading = true;
        Handler h = new Handler();
        h.postDelayed(new Runnable() {
            public void run() {
                splashloading = false;
                setContentView(R.layout.activity_main);
            }

        }, 3000);

    }
private static final long SPLASH_SCREEN_MS = 2500;

private long mTimeBeforeDelay;
private Handler mSplashHandler;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_splash_screen);
    // Create a new Handler.
    mSplashHandler = new Handler();
}

@Override
protected void onResume() {
    super.onResume();
    // The first time mTimeBeforeDelay will be 0.
    long gapTime = System.currentTimeMillis() - mTimeBeforeDelay;
    if (gapTime > SPLASH_SCREEN_MS) {
        gapTime = SPLASH_SCREEN_MS;
    }
    mSplashHandler.postDelayed(new Runnable() {
        @Override
        public void run() {
            Intent intent = new Intent(SplashScreenActivity.this, MainActivity.class);
            startActivity(intent);
            SplashScreenActivity.this.finish();
        }
    }, gapTime);
    // Save the time before the delay.
    mTimeBeforeDelay = System.currentTimeMillis();
}

@Override
protected void onPause() {
    super.onPause();
    mSplashHandler.removeCallbacksAndMessages(null);
}

祝你好运

谢谢我试过了,结果是一样的,当飞溅在活动开始前消失时,我仍然可以看到桌面或以前的应用程序。我修改了布局文件,现在它工作了,我给图像的父线性布局添加了黑色背景色。谢谢我试过了,结果是一样的,在活动开始之前,当飞溅消失时,我仍然可以看到桌面或以前的应用程序。我修改了布局文件,现在它可以工作了,我在图像的父线性布局中添加了黑色背景色。
private static final long SPLASH_SCREEN_MS = 2500;

private long mTimeBeforeDelay;
private Handler mSplashHandler;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_splash_screen);
    // Create a new Handler.
    mSplashHandler = new Handler();
}

@Override
protected void onResume() {
    super.onResume();
    // The first time mTimeBeforeDelay will be 0.
    long gapTime = System.currentTimeMillis() - mTimeBeforeDelay;
    if (gapTime > SPLASH_SCREEN_MS) {
        gapTime = SPLASH_SCREEN_MS;
    }
    mSplashHandler.postDelayed(new Runnable() {
        @Override
        public void run() {
            Intent intent = new Intent(SplashScreenActivity.this, MainActivity.class);
            startActivity(intent);
            SplashScreenActivity.this.finish();
        }
    }, gapTime);
    // Save the time before the delay.
    mTimeBeforeDelay = System.currentTimeMillis();
}

@Override
protected void onPause() {
    super.onPause();
    mSplashHandler.removeCallbacksAndMessages(null);
}