如何在呈现SplashScreen期间运行MainActivity

时间:2015-09-25 08:26:47

标签: android splash-screen

我可以找到两种方法来实现splash screen

"dd/MM/yyyy"

正如预期的那样,两种方法首先显示启动画面5秒钟,然后启动MainActivity。

在我的应用程序中,MainActivity启动相对耗时。因此,我在两种方法中看到的是启动屏幕5秒,然后黑屏显示几秒钟(比如我不使用启动画面),然后是MainActivity。

问题是如何在初始屏幕的演示期间启动MainActivity。

我尝试定义两个线程并同时运行,但结果与我不使用启动画面完全一样。

"dd/MM/yyyy"

3 个答案:

答案 0 :(得分:2)

使用Ian Lake的最佳做法 - post。当您的活动加载所有组件时,这会为您提供品牌屏幕。

如果您要将应用冻结5秒钟 - 这不是最好的主意,但您可以这样做。只需将延迟后的消息发送给处理程序。在Handler中,您可以使用setContent等来捕获消息并初始化您的活动......

答案 1 :(得分:1)

试试这个,

public class Splash extends Activity {

    private static final int SPLASH_SHOW_TIME = 1000;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
//      Fabric.with(this, new Crashlytics());
        requestWindowFeature(Window.FEATURE_NO_TITLE);
        setContentView(R.layout.activity_splash);

        new BackgroundSplashTask().execute();

    }

    private class BackgroundSplashTask extends AsyncTask<Void, Void, Void> {

        @Override
        protected void onPreExecute() {
            super.onPreExecute();
        }

        @Override
        protected Void doInBackground(Void... arg0) {
            try {
                Thread.sleep(SPLASH_SHOW_TIME);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }

            return null;
        }

        @Override
        protected void onPostExecute(Void result) {
            super.onPostExecute(result);
            Intent i = new Intent(Splash.this, MainActivity.class);
            startActivity(i);
            finish();
        }

    }
}

答案 2 :(得分:0)

您可以使用以下代码进行切换。

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

                @Override
                public void run() {
                    startActivity(new Intent(SplashActivity.this,MainActivity.class));
                    finish();
                }

            }, 2000);