【问题标题】:How to run MainActivity during presenting SplashScreen [duplicate]如何在呈现 SplashScreen 期间运行 MainActivity [重复]
【发布时间】:2015-09-25 08:26:46
【问题描述】:

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

public class MainSplashScreen extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main_splash_screen);

// METHOD 1     

         /****** Create Thread that will sleep for 5 seconds *************/        
        Thread background = new Thread() {
            public void run() {

                try {
                    // Thread will sleep for 5 seconds
                    sleep(5*1000);

                    // After 5 seconds redirect to another intent
                    Intent i=new Intent(getBaseContext(),MainActivity.class);
                    startActivity(i);

                    //Remove activity
                    finish();

                } catch (Exception e) {

                }
            }
        };

        // start thread
        background.start();

//METHOD 2  

        /*
        new Handler().postDelayed(new Runnable() {

            // Using handler with postDelayed called runnable run method

            @Override
            public void run() {
                Intent i = new Intent(MainSplashScreen.this, MainActivity.class);
                startActivity(i);

                // close this activity
                finish();
            }
        }, 5*1000); // wait for 5 seconds
        */
    }

    @Override
    protected void onDestroy() {

        super.onDestroy();

    }
}

正如预期的那样,这两种方法都首先显示启动屏幕 5 秒,然后启动 MainActivity。

在我的应用中,MainActivity 的启动相对耗时。因此,我在这两种方法中看到的都是启动屏幕 5 秒,然后是黑屏几秒钟(就像我不使用启动屏幕时一样),然后是 MainActivity。

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

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

        Thread background = new Thread() {
            public void run() {
                try {
                    sleep(5*1000);
                    finish();
                } catch (Exception e) {}
            }
        };
        Thread mainTh = new Thread() {
            public void run() {
                try {
                    Intent i=new Intent(getBaseContext(),MainActivity.class);
                    startActivity(i);
                } catch (Exception e) {}
            }
        };
        mainTh.start();
        background.start();

【问题讨论】:

标签: android splash-screen


【解决方案1】:

使用最佳实践 - 来自 Ian Lake 的 post。这会在您的活动加载所有组件时为您提供品牌屏幕。

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

【讨论】:

    【解决方案2】:

    试试这个,

    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();
            }
    
        }
    }
    

    【讨论】:

    • 差不多(闪屏,黑屏mainActivity)
    • 你可以使用闪屏两次,第二次设置布局空白,然后使用主活动。
    【解决方案3】:

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

    Handler mHandler = new Handler();
                mHandler.postDelayed(new Runnable() {
    
                    @Override
                    public void run() {
                        startActivity(new Intent(SplashActivity.this,MainActivity.class));
                        finish();
                    }
    
                }, 2000);
    

    【讨论】:

      猜你喜欢
      • 2018-07-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-12-02
      • 1970-01-01
      • 1970-01-01
      • 2016-05-29
      • 1970-01-01
      相关资源
      最近更新 更多