2015-07-18 40 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我只提出的建议。我永远不会建议任何人在任何事情上都会使用睡眠。