Cómo matar un hilo en Android?
Tengo un hilo de fondo corriendo en mi aplicación y necesito matarlo con seguridad. ¿Cómo puedo matar un hilo en java que no sea usar una bandera booleana? He leído que no puedo usar thread.stop () ya que no es seguro. pero ¿hay una manera adecuada de hacer esto? alguien puede darme un fragmento de código por favor?
Gracias
- ¿Cómo funciona maximumPoolSize de ThreadPoolExecutor?
- AsyncTask.executeOnExecutor () antes de API Nivel 11
- Objeto no bloqueado por subproceso antes de notificar () en onPostExecute
- Android: ¿Posible que el hilo de fondo bloquee hasta que el hilo de UI finalice la operación?
- Cómo pausar y no pausar el hilo en un juego?
- Cómo ejecutar subprocesos en paralelo en Android
- Cómo solucionar el problema de las llamadas de la biblioteca NDK que congela el subproceso de la interfaz de usuario
- Android Webview loadUrl no funciona cuando viene de un hilo de trabajo
- ¿Aplicación de hilo único utilizar multi núcleo en android?
- ¿Los hilos se eliminan automáticamente después de que el método run () sale en Java?
- Android BluetoothSocket - Tiempo de espera
- runOnUiThread no se está ejecutando en AsyncTask
- Bloques sincronizados android
Nunca es seguro en ningún idioma matar un hilo, no sabes lo que ese hilo puede estar haciendo y qué estado puede dejar atrás. Usando el método de cancelación con el hilo de rosca que ocasionalmente está comprobado, el hilo permite que el hilo controle su propia seguridad; puede optar por hacer esto solo cuando sería seguro matarse o hacer la limpieza necesaria.
Si en realidad no necesita matar un hilo, pero sólo quiere esperar hasta que termine, utilice join.
Si necesitas matar un hilo, sigue adelante y usa stop. Apenas no espere que su estado sea seguro o consistente después – esto debe realmente ser hecho solamente al terminar la aplicación / actividad.
Trate de usar algo como
service.getThread().interrupt(); service.setThread(null);
O
thread.interrupt(); thread = null;
Necesitas usar flag. Por ejemplo:
private boolean isThOn; //flag isThOn long delaytime; int times; ... new Thread() { public void run() { int i=0; isThOn = true; while (isThOn && i<times) { try { i++; //{...} if (i == times) isThOn = false; sleep(delaytime); } catch (Exception e) {e.printStackTrace();} } } }.start(); public void cancelthd() { isThOn = false; //whileloop will stop if isThOn = false -> Thread will Terminated befor i = times. }
- buscando un ejemplo de indicador de enfoque automático de cámara
- Encriptación de Android "bloque pad bloqueado" excepción