【问题标题】:Pausing and Resuming a Thread in Android. Studio在 Android 中暂停和恢复线程。工作室
【发布时间】:2020-06-03 02:00:00
【问题描述】:

我只想创建另一个线程,我需要让它继续做某事,直到我点击按钮 A,然后在我点击按钮 B 时恢复,仅此而已。

Thread t = new Thread(new Runnable(){

@Override

public void run(){ 

while(bool) { .... } 

}});

t.start();

这是我试图遵循的格式。我从 onCreate 开始,但如何暂停和恢复线程?

【问题讨论】:

    标签: java android multithreading performance android-studio


    【解决方案1】:

    使用wait()notifyAll()

    示例代码供您理解:

    class myRunnable implements somethingRunnable {
        private Object mPauseLock;
        private boolean mPaused;
        private boolean mFinish;
    
        public myRunnable() {
            mPauseLock = new Object();
            mPaused = false;
            mFinish = false;
        }
    
        public void run() {
            while (!mFinish) {
                // Do stuff here.
    
                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();
            }
        }
    
    }
    

    希望对你有帮助:)

    【讨论】:

      【解决方案2】:

      也许你可以使用另一个标志来做到这一点

      示例:

      私有布尔isPause = false;

      线程 t = new Thread(new Runnable(){

      @Override

      公共无效运行(){

       while(bool) {
        if(isPause){ Thread.sleep(500);继续; }

        ....

       }

      }});

      t.start();

      buttonA.setOnClickListener(new View.OnClickListener() {
      覆盖
      public void onClick(查看视图) {
      isPause = true;
      }
      });

      buttonB.setOnClickListener(new View.OnClickListener() {
      覆盖
      public void onClick(查看视图) {
      isPause = 假;
      }
      });

      【讨论】:

      • 不需要中断线程?不会保持线程运行(即使它没有做任何事情)消耗处理?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-08
      相关资源
      最近更新 更多