プログレスバーを再生しようとしています。プログレス(N)を呼び出すと、プログレスバーを次々とN回実行するこの(以下の)簡単なアクティビティがあります。それは素晴らしい仕事ですが、私が直面している問題は、私が戻るボタンを押した場合です。私はmainActivityに入りますが、進捗バー(スレッド)はバックグラウンドで次々に実行されています。 N個のループを終えると、その意図が呼び出され、私がしていることはこのLOOP_OVERアクティビティによって中断されます。すべてのスレッドを終了した後にアクティビティを終了します。
私はこれを私自身で解決しようとしました。 Threadクラスの変数を使ってみました(私が直接行っていた前に)。また、onDestroy()で割り込みを試みたり、意図が呼び出される直前に割り込みを試みたりしましたが、それは役に立ちませんでした。それについてどうすればいいですか?
public class Loop extends Activity {
private ProgressBar progressBar;
private CircleProgress circleProgress;
private int progressStatus = 0;
private Handler handler = new Handler();
private TextView myView;
private int started = 0, doneLoop=0;
private Thread th;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_loop);
progressBar = (ProgressBar) findViewById(R.id.progressBar1);
circleProgress = (CircleProgress) findViewById(R.id.circle_progress);
myView = (TextView) findViewById(R.id.instruction);
progressBar.setScaleY(3f);
// Start long running operation in a background thread
Progress(3);
}
@Override
public void onDestroy() {
// Below, everything I am just
th.interrupt();
Loop.this.finish();
Thread.currentThread().interrupt();
super.onDestroy();
}
public void Progress(final int numberOfRuns){
// QueView.setText(Que);
if(numberOfRuns == 0){
th.interrupt();
Intent myIntent = new Intent(Loop.this, LOOP_OVER.class);
startActivity(myIntent);
super.onDestroy();
finish();
}
th = new Thread(new Runnable() {
public void run() {
genNextSet();
while (progressStatus < 100) {
progressStatus += 1;
// Update the progress bar and display the
//current value in the text view
handler.post(new Runnable() {
public void run() {
circleProgress.setProgress(progressStatus);
progressBar.setProgress(progressStatus);
textView.setText(progressStatus+"/"+progressBar.getMax());
}
});
try {
runOnUiThread(new Runnable() {
@Override
public void run() {
// TODO Auto-generated method stub
myView.setText(Que);
}
});
// Sleep for 200 milliseconds.
//Just to display the progress slowly
Thread.sleep(30);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
progressStatus = 0;
Progress(numberOfRuns - 1);
}
});
th.start();
}
private void genNextSet() {
// so some cool here!
}
}
私は悪い気分です。私はこの方法を考えることができませんでした。実際には、私はそれについて懸命に考えようとしなかった。素晴らしい考えbtw。出来た。 :) PS:私は答えを編集して、私が答えを受け入れることができるように編集を受け入れました。 – impossible