¿Cómo termino HandlerThreads?
Siguiendo los ejemplos de Googles para usar un servicio, he creado un par de hilos como éste. No puedo utilizar IntentService, porque estoy haciendo algo que implica esperar a callbacks.
Sin embargo, no sé cómo terminar un hilo iniciado de esta manera. Según lo entiendo, los subprocesos terminan automáticamente cuando el método run () devuelve. Sin embargo, este tipo de subproceso no tiene un método de ejecución. Mis hilos están goteando – se mantienen vivos después de stopSelf ().
- Android - Cargando, por favor espere
- ¿Cómo puedo reiniciar un hilo en java / Android desde un botón?
- Cómo matar un hilo en Android?
- Hacer un hilo que cancela una llamada de InputStream.read () si ha pasado el tiempo 'x'
- Android wait asynctask para terminar
@Override public void onCreate() { HandlerThread thread = new HandlerThread("ServiceStartArguments", android.os.Process.THREAD_PRIORITY_BACKGROUND); thread.start(); HandlerThread thread2 = new HandlerThread("CallbackHandling", android.os.Process.THREAD_PRIORITY_BACKGROUND); thread2.start(); mServiceLooper = thread.getLooper(); mCallbackLooper = thread2.getLooper(); mServiceHandler = new MyHandler(mServiceLooper); mCallbackHandler = new Handler(mCallbackLooper); } @Override public int onStartCommand(Intent intent, int flags, int startId) { Toast.makeText(this, "service starting", Toast.LENGTH_SHORT).show(); // For each start request, send a message to start a job and deliver the // start ID so we know which request we're stopping when we finish the job Message msg = mServiceHandler.obtainMessage(); msg.arg1 = startId; mServiceHandler.sendMessage(msg); mMainThreadHandler=new Handler(); // If we get killed, after returning from here, restart return START_STICKY; } private final class MyHandler extends Handler { public MyHandler(Looper looper) { super(looper); } @Override public void handleMessage(Message msg) { cycle(); // Stop the service using the startId, so that we don't stop // the service in the middle of handling another job stopSelf(msg.arg1); } } protected void cycle() { ... mCallbackHandler.post(new Runnable(){ public void run(){ goAskForSomeCallbacks(); } }); try { Thread.sleep(GIVE_UP_TIME); } catch (InterruptedException e){ //The callback will interrupt this thread to stop it from waiting Log.d(TAG,"Got early callback, stop waiting."); } Thread.interrupted(); //clear the interrupt doStuff(); }
- El hilo no vuelve después de notifyall ()
- ¿Se asignan automáticamente nuevos subprocesos a un núcleo de CPU diferente en Java?
- Android AsyncTask.THREAD_POOL_EXECUTOR vs ThreadPool personalizado con Runnables
- runOnUiThread no se está ejecutando en AsyncTask
- Método runOnUiThread () para Android
- ¿Una clase anónima mantiene referencias externas vivas?
- Llamar a un AsyncTask de otro AsyncTask
- Java.util.concurrent.TimeoutException android.view.ThreadedRenderer.finalize () tiempo de espera transcurridos 10 segundos
Intente llamar al método quit
en los Loopers correspondientes.
Puede llamar al método quit en los hilos del manejador.
p.ej
thread.quit(); thread2.quit();
Forzar el cierre de la aplicación lo hace, pero de lo contrario sólo seguir adelante por su cuenta.
- Proteger con contraseña el lanzamiento de la aplicación Android
- Android Google Analytics que causa la pantalla negra