杀死所有线程后退出活动android
我想玩进度条。当我调用Progress(N)时,我有这个(下面)简单的活动,一个接一个地运行一个进度条N次。它工作的很好,但是我面临的问题是,如果我按回按钮。我进入mainActivity,但进度条(线程)仍然依次在后台运行。只要他们完成了N个循环,意图就会被调用,我所做的任何事情都会被这个LOOP_OVER活动中断。杀死所有线程后退出活动android
我试着自己解决这个问题。我尝试使用Thread类的变量(在我直接做它之前)。并试图在onDestroy()中或甚至在调用intent之前中断它(),但它不起作用。我应该怎么做呢?
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!
}
}
你可以认为是所有线程共享一个类变量。
尝试添加这样的事情:
private Boolean LOOP = true;
然后
while (progressStatus < 100 && LOOP) {
和
@Override
public void onBackPressed() {
LOOP = false
}
也
if(LOOP == true){
// call intent
}
finish();
你的活动不被摧毁,如果按“返回” - 键,从而onDestroy()
不会被调用。
如果我在哪里,我会覆盖onBackPressed()
。
或者,您可以尝试将其放入onPause()
-方法。
托尼在上面的答案中提示的是一样的我试过了,但没有帮助。在Tony的回答中阅读我最后的评论。这是真正的问题。 – impossible
您还没有覆盖的后退按钮pressed..try这
@Override
public void onBackPressed() {
th.interrupt();
Loop.this.finish();
Thread.currentThread().interrupt();
super.onBackPressed();
// add finish() if you want to kill current activity
}
我这样做,但没有帮助。我认为,我们需要一些线程管理。我不知道在java或android的具体。看看你是否可以让我完成它。 – impossible
你用finish()试过了吗? –
是的。我确实尝试过。 – impossible
我对我感觉很糟糕。我想不出这种方法。其实我并没有试图在这方面认真思考。伟大的思想btw。有效。 :) PS:我编辑了答案,接受编辑,以便我可以接受答案。 – impossible