2016-05-29 10 views
0
すべての

まず、私のコード:ここでアンドロイド - スレッドの問題(条件が二倍に達している)プログレスバー

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

、私は、Androidにプログレスバーをテストしています。それが条件に達すると:

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

ログはlogcatに2回出力されますが、私はその理由を知りません。私は間違って何をしていますか?

答えて

0

この行を削除すると、ログファイルに2行目は表示されません。

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR_LANDSCAPE); 

は、実際に使用すると、画面の向きを変更するには、Android尋ねるとき、Androidシステムは、あなたの活動を再作成し、それゆえ、他のスレッドがまだ働いている間に、新しいスレッドを作成します。これはあなたの問題につながります。

画面の向きを横向きにする場合は、動作の向き属性の下でマニフェストファイルを変更してみてください。

+0

有用なリンク: https://developer.android.com/guide/topics/resources/runtime-changes.html –

+0

ありがとう、それは私のために働いた。 – LukeHxH