2011-03-23 15 views

Respuesta

2

Debe usar la función HandlerremoveCallbacks().

Código de ejemplo:

@Override 
public boolean onBackPress(int keyCode, KeyEvent event) { 
    if (keyCode == KeyEvent.KEYCODE_BACK) { 
     handler.removeCallbacks(yourRunnable); 
     return true; 
    } 

    return super.onKeyDown(keyCode, event); 
} 
+0

@Viktor puse su código bt no funciona, todavía se está ejecutando el hilo ... – Siten

+0

@siten: ¿Cómo puede determinar si su hilo todavía se está ejecutando? – Wroclai

+0

CATlog me muestra el valor del hilo – Siten

2

No puede usar los métodos stop o destroy. En el método onStop, debe usar this.

+0

verifique el enlace..en la palabra 'this' en la declaración anterior ... – Udaykiran

+0

Está usando 'Handler' que no está en el mismo contexto como un' Tema' original. – Wroclai

+0

ya eres rito. No podemos dejar o destruir el hilo y el método .. gracias por Guía Educativa vacas .. uno a voto para usted .. muchas gracias ... – Siten

1

Almacene una referencia al hilo al crearlo. En su actividad , pause o elimine el hilo de referencia.

+0

@ Override \t public void onBackPressed() { \t \t handler.removeCallbacks (r1); \t \t super.onBackPressed(); \t} eso está bien ?? – Siten

+0

Eso no es correcto. Use la función 'removeCallback()' de 'Handler'. Ver mi respuesta a continuación. – Wroclai

0

Usted puede asignar una acción en la parte posterior pulse el botón anulando la función onBackPressed() en su actividad. Esta acción debe tener un comando para detener el hilo. Aparecerá de la siguiente manera.

@Override 
public void onBackPressed() { 
    super.onBackPressed(); 
      thread.stop(); 
} 
+0

utilicé controlador ... y thread.stop(); o controlador.detener(); no es posible en la operación de retroceso – Siten

+0

¿Le pusiste un nombre al hilo y lo usaste en onBackPressed? –

0

Aquí hay una demostración para detener el hilo de una manera más fácil y más rápida.

Button back = (Button)findViewById(R.id.back); 
back.setText("Back"); 
back.setOnClickListener(this); 

private Handler handler = new Handler() 
{ 
@Override 
    public void handleMessage(Message msg) 
    { 
     super.handleMessage(msg); 
     if(msg.obj.toString().contentEquals("hello")) 
     { 
      // do whatever u what to perform after thread stop.... 
     } 
     removeDialog(0); 
     } 
}; 

@Override 
public void onClick(View v) 
{ 
    if(v==back) 
    { 
     showDialog(0); 
     t=new Thread() 
     { 
      public void run() 
      { 
       Message toMain = handler.obtainMessage(); 
       toMain.obj = "hello"; 
       handler.sendMessage(toMain); 
      } 
     };   
     t.start(); 
    } 
} 

@Override 
protected Dialog onCreateDialog(int id) 
{ 
      switch (id) 
     { 
        case 0: 
      { 
          ProgressDialog dialog = new ProgressDialog(this); 
          dialog.setMessage("Connecting . . . . . ."); 
          dialog.setIndeterminate(true); 
          dialog.setCancelable(true); 
          return dialog; 
        } 
       } 
       return null; 
} 

Utilice este método para crear o detener el hilo. Espero que tome menos tiempo.

0

Si está utilizando el manejador, puede simplemente eliminar las devoluciones de llamadas mediante handler.removeCallbacks (ejecutable); Esto debería funcionar perfectamente. Happy Coding :)

Cuestiones relacionadas