如何在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(),线程不会停止。


有人知道解决方案吗?


狐的传说
浏览 843回答 2
2回答

UYOU

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

慕桂英546537

试试下面的代码,它将起作用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();}}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Android