杀死所有线程后退出活动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(); 
+0

我对我感觉很糟糕。我想不出这种方法。其实我并没有试图在这方面认真思考。伟大的思想btw。有效。 :) PS:我编辑了答案,接受编辑,以便我可以接受答案。 – impossible

你的活动不被摧毁,如果按“返回” - 键,从而onDestroy()不会被调用。
如果我在哪里,我会覆盖onBackPressed()
或者,您可以尝试将其放入onPause()-方法。

+0

托尼在上面的答案中提示的是一样的我试过了,但没有帮助。在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 
} 
+0

我这样做,但没有帮助。我认为,我们需要一些线程管理。我不知道在java或android的具体。看看你是否可以让我完成它。 – impossible

+0

你用finish()试过了吗? –

+0

是的。我确实尝试过。 – impossible