如何在Android中暂停/恢复线程?

我有一个线程,进入一个活动。 我不希望线程连续运行,当用户单击主页button,或者,例如,用户收到一个电话。 所以我想暂停线程并在用户重新打开应用程序时继续。 我试过这个:

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()线程不停止。

任何人都知道解决scheme

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