【问题标题】:How to stop Black screen after Splash Screen?启动画面后如何停止黑屏?
【发布时间】:2018-06-07 11:03:14
【问题描述】:

我在我的 Android 应用程序中使用了启动画面和进度条。但是在启动画面消失后,下一个屏幕在切换到我的主要活动之前变黑。但我不想要黑屏。谁能解释一下这里发生了什么以及如何防止黑屏?这是我的 Splash Java 类。

public class Splash extends AppCompatActivity {
    private ProgressBar mProgress;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_splash);
        mProgress = (ProgressBar) findViewById(R.id.splash_screen_progress_bar);

        new Thread((new Runnable() {
            @Override
            public void run() {
                doWork();
                startApp();
                finish();
            }
        }
        )).start();
    }

    private void doWork() {
        for (int progress = 0; progress < 100; progress += 10) {
            try {
                Thread.sleep(5500);
                mProgress.setProgress(progress);
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }

    private void startApp() {
        Intent intent = new Intent(Splash.this, MainActivity.class);
        startActivity(intent);

    }
}

【问题讨论】:

  • 您到底想要什么?进度完成后是否需要下一个屏幕?或者您希望启动画面显示几秒钟并切换到下一个屏幕?

标签: android progress-bar splash-screen


【解决方案1】:

我认为您可以删除 Thread 中的 finish()

【讨论】:

    【解决方案2】:
    public class Splash extends AppCompatActivity {
    private ProgressBar mProgress;
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_splash);
        mProgress = (ProgressBar) findViewById(R.id.splash_screen_progress_bar);
    
        new Thread((new Runnable() {
            @Override
            public void run() {
                doWork();
                startApp();
    
            }
        }
        )).start();
    }
    
    private void doWork() {
        for (int progress = 0; progress < 100; progress += 10) {
            try {
                Thread.sleep(5500);
                mProgress.setProgress(progress);
                return;
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }
    
    private void startApp() {
        Intent intent = new Intent(Splash.this, MainActivity.class);
        startActivity(intent);
    
    }
    

    }

    【讨论】:

    • 一般来说,如果答案包含对代码的用途的解释,以及为什么在不介绍其他人的情况下解决问题的原因,答案会更有帮助。感谢您提高答案的参考价值并使其更易于理解!
    • 代码在 dowork() 方法中缺少返回语句。
    【解决方案3】:

    方法一: 如果您需要几秒钟的飞溅:

    new Thread((new Runnable() {
            @Override
            public void run() {
                try { Thread.sleep(5500); }catch(Exception e) {}
                startApp();
                finish();
            }
        }
        )).start();
    

    方法2:启动完成时显示下一个屏幕:

     public class Splash extends AppCompatActivity {
        private ProgressBar mProgress;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_splash);
            mProgress = (ProgressBar) findViewById(R.id.splash_screen_progress_bar);
    
            new Thread((new Runnable() {
                @Override
                public void run() {
                    doWork();
    
                }
            }
            )).start();
        }
    
        private void doWork() {
            for (int progress = 0; progress < 100; progress += 10) {
                try {
                    Thread.sleep(5500);
                    mProgress.setProgress(progress);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
            startApp();
            finish();
        }
    
        private void startApp() {
            Intent intent = new Intent(Splash.this, MainActivity.class);
            startActivity(intent);
    
        } 
    }
    

    【讨论】:

      【解决方案4】:

      试试这个:

      public class Splash extends AppCompatActivity {
          private ProgressBar mProgress;
      
          @Override
          protected void onCreate(Bundle savedInstanceState) {
              super.onCreate(savedInstanceState);
              setContentView(R.layout.activity_splash);
              mProgress = (ProgressBar) findViewById(R.id.splash_screen_progress_bar);
      
              new Thread((new Runnable() {
                  @Override
                  public void run() {
                      doWork();
                      }
              }
              )).start();
          }
      
          private void doWork() {
              for (int progress = 0; progress < 100; progress += 10) {
                  try {
                      Thread.sleep(5500);
                      mProgress.setProgress(progress);
                  } catch (Exception e) {
                      e.printStackTrace();
                  }
              }
                startApp();
          }
      
          private void startApp() {
              Intent intent = new Intent(Splash.this, MainActivity.class);
              startActivity(intent);
           finish();
          }
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-09-17
        • 1970-01-01
        • 1970-01-01
        • 2021-02-23
        • 1970-01-01
        • 1970-01-01
        • 2019-05-07
        • 1970-01-01
        相关资源
        最近更新 更多