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