2012-02-03 37 views
0

我有AsyncTask,我在後臺的進度是無限循環。但是,當用戶停止我的應用程序或從我的應用程序返回時(我的應用程序轉到前臺),我需要停止AsyncTask。我該怎麼做?如何在無限循環中停止AsyncTask?

解決方案:

私人布爾做= FALSE;

private class CurTask extends AsyncTask<String, Void, Object> { 
     protected Void doInBackground(String... args) { 
      while(!done){ 
       DefaultCurProgress();   
       publishProgress(); 
      } 
     } 

     protected void onProgressUpdate(Void...unused) { 
      textCur = (TextView)findViewById(R.id.text_cur); 

      SharedPreferences myPrefs = MyActivity.this.getSharedPreferences("myPrefs", MODE_PRIVATE); 
      String prefNameDefaultCur = myPrefs.getString(DefaultCur, ""); 

      textCur.setText(prefNameDefaultCur); 
     } 
} 

@Override 
    public void onPause(){ 
     super.onPause(); 
     done=true; 
    } 

    @Override 
    public void onResume(){ 
     super.onResume(); 
     done=false; 
    } 
+0

像任何線程一樣,應該可以在while(keepRunning == true)時使用一個標誌''。 – harism 2012-02-03 15:39:42

回答

4

聲明,告訴它來結束你的AsyncTask內的方法。事情是這樣:

private class CurTask extends AsyncTask<String, Void, Object> { 
    private boolean done = false; 

    public void quit() { 
     done = true; 
    } 

    protected Void doInBackground(String... args) { 
     while(!done){ 
      DefaultCurProgress();   
      publishProgress(); 
     } 
    } 
+0

但是當我的Activity或app停止時,如何調用quit()? – Adam 2012-02-03 15:53:02

+0

從你的Activity的onPause()方法調用它? – 2012-02-03 15:55:03

+0

是的,我認爲它,但我不想重拍你的代碼。現在,它的工作,謝謝。代碼將會啓動。 – Adam 2012-02-03 16:03:04

0

添加一個布爾成員變量和使用,在您的病情時,而不是真正的

然後,當您需要取消它時,您可以調用實例方法將此變量設置爲false,doInBackground方法將返回並完成任務。