我正在做一些练习,我需要一些帮助。
我有2个按钮,1个用于启动方法,1个用于取消。此方法调用 Tarea 并返回Long(值)。我必须使AsyncTask运行此方法,并在取消或结束时返回TOAST Long。
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;
}
}
代码必须采用此格式,并使用名为 public Long的方法 Tarea(AsyncTask tarea),以及私有AsyncTask tarea = new AsyncTask()因为我的老师想要的。
答案 0 :(得分:0)
您无法点击取消,因为doInBackground
可能在几纳秒内完成(非常非常快)。
为了能够在方法完成之前点击cancel
,您应该在其中加入Sleep
。
PS:我只是建议它,因为它是一个简单的练习来显示正在执行的AsyncTask。我永远不会建议任何人在任何事情上使用睡眠。