Как остановить черный экран после заставки? - PullRequest
0 голосов
/ 07 июня 2018

Я использовал заставку и индикатор выполнения в своем приложении для 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);

    }
}

Ответы [ 4 ]

0 голосов
/ 11 июня 2018

Попробуйте это:

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();
    }
}
0 голосов
/ 07 июня 2018
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);

}

}

0 голосов
/ 07 июня 2018

Подход 1: Если вам потребовался всплеск в течение нескольких секунд:

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

    } 
}
0 голосов
/ 07 июня 2018

Я думаю, вы могли бы удалить finish() внутри Thread.

...