Как приостановить / возобновить поток в Android?

У меня есть поток, который работает в активности. Я не хочу , чтобы потоки продолжались, когда пользователь нажимал кнопку «домой» или, например, пользователь получал телефон вызова. Поэтому я хочу приостановить поток и возобновить его, когда пользователь снова откроет приложение. Я пробовал с этим:

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

Он останавливает поток, но не возобновляет его, поток кажется замороженным.

Я также пробовал использовать устаревший метод Thread.suspend() и Thread.resume() , но в этом случае в Activity.onPause() поток не останавливается.

Кто-нибудь знает решение?

Используйте wait() и notifyAll() правильно, используя блокировку.

Образец кода:

 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(); } } } 

Попробуйте приведенный ниже код, он будет работать

 Thread thread=null; 

OnResume ()

  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(); } }