2015-07-18 24 views
0

我做一些練習,我需要一些幫助。ANDROID - 法裏面的AsyncTask用按鈕來啓動和取消

我有2個按鈕,1個啓動方法和其他取消。此方法調用Tarea並返回Long(值)。我必須讓一個AsyncTask運行這個方法,並在TOAST取消或結束時返回。

public class Actividad1 extends Activity { 

    Long valor = Long.MIN_VALUE; 

    private AsyncTask tarea = new AsyncTask<Void, Void, Long>(){ 

     @Override 
     protected Long doInBackground(Void... params) { 

      return valor; 
     } 

     @Override 
     protected void onPostExecute(Long result) { 
      Toast toast = Toast.makeText(Actividad1.this, "Valor: " + valor, Toast.LENGTH_LONG); 
      toast.show(); 
      super.onPostExecute(result); 
     } 

     @Override 
     protected void onCancelled() { 
      Toast toast = Toast.makeText(Actividad1.this, "Valor: " + valor, Toast.LENGTH_LONG); 
      toast.show(); 
      super.onCancelled(); 
     }         
    }; 


@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_actividad1); 
} 

public void clickBotonEjecutar (View view){ 
    Tarea(tarea); 
    tarea.execute(); 

} 

public void clickBotonCancelar (View view){ 
    tarea.cancel(true);  

} 


public Long Tarea(AsyncTask tarea) { 
    Long valor = Long.MIN_VALUE; 
    while (! tarea.isCancelled() && valor <= Long.MAX_VALUE) { 
     System.out.println("Se está ejecutando…" + valor); 
     try {Thread.sleep(1000);} catch (InterruptedException e) {} 
     valor ++; 
    } 
    return valor; 

}
}

代碼必須在這種格式,一個叫公共龍 利亞(的AsyncTask利亞)方法,並與私人的AsyncTask利亞=新 的AsyncTask ()因爲是我的老師想要的。

回答

0

您無法點擊取消,因爲doInBackground可能在幾個納秒(真的很快)中執行。

爲了能夠在方法結束前點擊cancel,應該在裏面放一個Sleep

PS:因爲這是一個簡單的練習,以顯示正在執行的AsyncTask我只提出的建議。我永遠不會建議任何人在任何事情上都會使用睡眠。