就像杀死一个线程(AsyncTask,Timer)

时间:2013-10-28 07:58:30

标签: android multithreading timer android-asynctask

嗨好我有以下问题: 我有几个切换按钮,当我点击一个调用AsyncTask来执行其功能,但问题是,当我返回并单击按钮切换此关闭我必须停止该线程,我尝试使用我有的变量称为“flag”但在AsyncTask中分配变量时也不会分配变量,并且在检查是否选择了任何切换按钮时,在代码的开头获取分配。

这里有代码:

int falg;

...



btnBoton.setOnClickListener(new View.OnClickListener() {

   public void onClick(View arg0)

   {

       if(btnBoton.isChecked()){

       salir = false;

       flag = 1;

           verRegistro();}

       else{

        salir = true;

        flag = 0;

        }

       //accionesScada.desconectar();

   }

});



public class conectar extends AsyncTask<String,String,Integer>{

   int m;

   int startReg;

   int count;

   String dirIP=new String();

        String dirReg=new String();

        TextView texto,conectado;



        public conectar(String ip,String reg,TextView t,TextView r) {

this.dirIP=ip;

            this.dirReg=reg;

            this.conectado = t;

            this.texto = r;

            try {

   //IP address;



addr = InetAddress.getByName(dirIP);

startReg = Integer.decode(dirReg).intValue();



            } catch (Exception e) {

   Log.d("MODBUS","IP error", e);

        }

       }



   protected Integer doInBackground(String... urls) {

   m = accionesScada.conectar(addr, port);

   resultado = accionesScada.LeerRegistro(startReg, count);



   return 0;

         }





   protected void onPostExecute(Integer bytes) {





   if(btnBoton.isChecked() == false){

   setFlag(0);

        salir = true;

        //depurar2.setText(String.valueOf(flag));

        depurar.setText("Desconectado");

        depurar.setTextColor(Color.RED);

        this.cancel(true);

        }else{

        if(m==1){

    conectado.setText("Conectado");

    conectado.setTextColor(Color.GREEN);

 }

        String resul = String.valueOf(resultado);

      texto.setText(resul);

        }





   }

    }

    public void setFlag(int bandera){

   this.abc = bandera;

    }

    public int getFlag (){

   return flag;

    }

//tenemos varios tipos de ver registro uno para cada registro que podamos ver simultaneamente en pantalla, para eso esta.

public void verRegistro()  {

final Handler handler = new Handler();

   Timer timer = new Timer();

   TimerTask doAsynchronousTask = new TimerTask() {

   @Override

public void run() {

handler.post(new Runnable() {



@Override

public void run() {







       //accionesScada.desconectar();





try{ 

String aux = new String();

   String aux1 = new String();

   try {

   //IP address;



   aux1 = plc1;

   Cursor Creg = (SQLiteCursor)reg.getSelectedItem();

   aux = obtenerDireccionRegistro(Creg.getString(0));





} catch (Exception e) {

   Log.d("MODBUS","IP error", e);



   }

conectar conectamos = new conectar(aux1,aux,depurar,text);

       conectamos.execute("");







}catch(Exception e){

Log.d("MODBUS", "Error Timertask");

}





}



});



}



   }; 



 //here is the problem, here the flag always what made mark the beginning and at the aynctask not assigned either to the flag value, and do not know why always so here is sending commands to the AsyncTask continuously every second and I I want is to cancel this.


       if(flag == 0){

       timer.cancel();

           depurar2.setText(String.valueOf(flag));}

       else if(flag == 1){

       depurar2.setText(String.valueOf(flag));

       timer.schedule(doAsynchronousTask, 0, 1000);}



        }

感谢您的帮助=)。

0 个答案:

没有答案
相关问题