ANDROID - AsyncTask中的方法,带有按钮来启动和取消

时间:2015-07-18 20:35:40

标签: android android-asynctask

我正在做一些练习,我需要一些帮助。

我有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()因为我的老师想要的。

1 个答案:

答案 0 :(得分:0)

您无法点击取消,因为doInBackground可能在几纳秒内完成(非常非常快)。

为了能够在方法完成之前点击cancel,您应该在其中加入Sleep

PS:我只是建议它,因为它是一个简单的练习来显示正在执行的AsyncTask。我永远不会建议任何人在任何事情上使用睡眠。