Android-Thread issues (условие достигается дважды) ProgressBar

Прежде всего, мой код:

private ProgressBar progressBar;
private int progressStatus = 0;
private Handler handler = new Handler();

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    requestWindowFeature(Window.FEATURE_NO_TITLE);
    setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR_LANDSCAPE);
    getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);

    setContentView(R.layout.activity_starter_load);

    progressBar = (ProgressBar) findViewById(R.id.progressBar1);

    new Thread(new Runnable() {
        public void run() {
            while (progressStatus < progressBar.getMax()) {
                progressStatus++;
                handler.post(new Runnable() {
                    public void run() {
                        progressBar.setProgress(progressStatus);
                    }
                });
                try {
                    Thread.sleep(50);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }

                if (progressStatus == 100) {
                    Log.e("download complte", "testing"); // This is being printed twice.
                }
            }
        }
    }).start();
}

Здесь я тестирую ProgressBar в Android. Когда он достигает условия:

if (progressStatus == 100) {...}

Журнал печатается дважды в logcat, и я не знаю, почему. Что я делаю не так?

1 ответ

  1. Удалите эту строку, и вы не получите вторую строку в файле журнала.

      setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR_LANDSCAPE);
    

    На самом деле, когда вы попросите android изменить ориентацию экрана, система android воссоздает вашу деятельность и, следовательно, создает новый поток, в то время как другой поток все еще работает. Это приводит к вашей проблеме.

    Если вы хотите, чтобы ориентация экрана была горизонтальной, попробуйте изменить ее с помощью файла манифеста в атрибуте ориентация действия.