java - java android 中的等待/恢复线程

标签 java android multithreading plot

我试图暂停一个线程然后恢复它,但是当我暂停时它会卡住应用程序。我尝试了几件事,但没有运气。 在我的主要 Activity 中,我调用线程并具有将暂停线程的按钮和第二个可运行类,它开始运行并在我的绘图上绘制,其中包括暂停函数。我实现的代码如下

主要 Activity

            public void onCreate(Bundle savedInstanceState) {
                    super.onCreate(savedInstanceState);

         mDoctorDynamicXYDatasource= new DoctorDynamicXYDatasource(this, mHandler);
       findViewById(R.id.Pause).setOnClickListener(new View.OnClickListener() {

                @Override
                public void onClick(View v) { 
                 synchronized(pp){
                    mDoctorDynamicXYDatasource.Pause();
                Log.i("File", "Pause button ");
                    }
                }   
    });
    findViewById(R.id.Start).setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) { 
           draw();
         }
    });


    public void draw(){

       ///some code
       pp= new Thread(data);
         pp.start();
    }

and on the **DoctorDynamicXYDatasource class** am doing the follow

  public class DoctorDynamicXYDatasource extends Activity implements Runnable {

   public void run() {
         //loading and draw on the plot
          }

  public void Pause() {
        synchronized (Thread.currentThread()) {
         Log.i("File","pause");
                try {
                Thread.currentThread().wait();
            } catch (InterruptedException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
            }
        }

    }

如何暂停线程然后再次启动它。当我暂停线程时,它会锁定,而不是仅绘制所有屏幕和按钮,而无法进行选择

编辑

我添加了您告诉我的代码,并从带有暂停按钮的主 Activity 中调用我的 DoctorDynamicXYDatasource 类的暂停函数,但它没有同步以等待线程。我也不允许从其他类调用暂停函数?

mDoctorDynamicXYDatasource= new DoctorDynamicXYDatasource(this, mHandler);
         findViewById(R.id.Pause).setOnClickListener(new View.OnClickListener() {

                @Override
                public void onClick(View v) { 

                    Log.i("File", "Pause button pressed");
    mDoctorDynamicXYDatasource.pause();

                }
            });

最佳答案

您正在 UI 线程上调用暂停,这确实会导致应用程序卡住。

您必须从内部暂停您的特定线程,如下所示:

public void run() {
    // Your code here, there is probably a loop
    while (someCondition) {
        // Loop work
        synchronized(this) {
            if (pause) {
                pause = false;
                wait();
            }
        }
    }
}

public synchronized void pause() {
    pause = true;
}

public synchronized void go() {
    notify();
}

调用暂停将允许线程在下一次迭代时等待。调用go将使线程立即退出等待状态。

Afaik,除非您在线程中,否则无法强制线程暂停。

关于java - java android 中的等待/恢复线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9392083/

相关文章:

java - 使用 Apache POI、Excel 和 Eclipse 时出现 "Exception in thread "main "java.lang.NullPointerException"?

java构造函数顺序

java - 将字符串 "yyyy-MM-dd"转换为 "E, MMM d"

java - 警报对话框的按钮被切断

java - 方法中仅运行单线程

java - 256bit AES/CBC/PKCS5Padding with Bouncy CaSTLe

java - 关于从文件读取时跳过备用行的解释?

java - 我的 Recyclerview 加载无限时出错

c++ - 多个线程/进程可以在不同步的情况下同时读取/写入文件的非重叠区域吗?

C# ThreadPool QueueUserWorkItem 异常处理