vida studio reiniciar pause ejemplo developers created ciclo activity android multithreading

studio - Cómo pausar/reanudar el hilo en Android?



reiniciar activity android studio (2)

Pruebe el siguiente código, funcionará

Thread thread=null;

En resumen()

public void onResume(){ super.onResume(); if(thread == null){ thread = new Thread() { @Override public void run() { try { } } catch (InterruptedException e) { e.printStackTrace(); } } }; thread.start(); } }

onPause ()

@Override public void onPause(){ super.onPause(); if(thread != null){ Thread moribund = thread; thread = null; moribund.interrupt(); } }

Tengo un hilo que se ejecuta en una actividad. No quiero que el hilo continúe ejecutándose cuando el usuario hace clic en el botón de inicio o, por ejemplo, el usuario recibe un teléfono de llamada. Por lo tanto, quiero pausar el hilo y reanudarlo cuando el usuario vuelva a abrir la aplicación. Lo he intentado con esto:

protected void onPause() { synchronized (thread) { try { thread.wait(); } catch (InterruptedException e) { e.printStackTrace(); } } super.onPause(); } protected void onResume() { thread.notify(); super.onResume(); }

Detiene el hilo pero no lo reanuda, el hilo parece congelado.

También he intentado con el método en desuso Thread.suspend() y Thread.resume() , pero en este caso en Activity.onPause() el hilo no se detiene.

Alguien sabe la solución?


Use wait() y notifyAll() correctamente utilizando un bloqueo.

Código de muestra:

class YourRunnable implements Runnable { private Object mPauseLock; private boolean mPaused; private boolean mFinished; public YourRunnable() { mPauseLock = new Object(); mPaused = false; mFinished = false; } public void run() { while (!mFinished) { // Do stuff. synchronized (mPauseLock) { while (mPaused) { try { mPauseLock.wait(); } catch (InterruptedException e) { } } } } } /** * Call this on pause. */ public void onPause() { synchronized (mPauseLock) { mPaused = true; } } /** * Call this on resume. */ public void onResume() { synchronized (mPauseLock) { mPaused = false; mPauseLock.notifyAll(); } } }