为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

狐的传说 2019-11-27 13:55:35
我有一个正在运行的线程。我不希望当用户单击“主页”按钮或例如用户收到通话电话时,线程继续运行。所以我想暂停线程并在用户重新打开应用程序时恢复它。我已经试过了: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(),线程不会停止。有人知道解决方案吗?
查看完整描述

2 回答

?
UYOU

TA贡献1878条经验 获得超4个赞

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

        }

    }


}


查看完整回答
反对 回复 2019-11-27
?
慕桂英546537

TA贡献1848条经验 获得超10个赞

试试下面的代码,它将起作用


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

}

}


查看完整回答
反对 回复 2019-11-27
  • 2 回答
  • 0 关注
  • 842 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信