Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
javaandroid中的等待/恢复线程_Java_Android_Multithreading_Plot - Fatal编程技术网

javaandroid中的等待/恢复线程

javaandroid中的等待/恢复线程,java,android,multithreading,plot,Java,Android,Multithreading,Plot,我试图暂停一个线程,然后恢复它,但当我暂停它冻结应用程序。我尝试了几件事,但运气不好。 在我的主要活动中,我调用线程,有一个按钮将暂停线程,第二个可运行类将开始运行,并在我的绘图上绘制,其中包括和暂停函数。我实现的代码如下 主要活动 public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); mDoct

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

主要活动

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

    }
如何暂停线程,然后重新启动它。当我暂停线程时,它会锁定所有屏幕上的绘图和按钮,而无法进行选择

编辑

我添加了您告诉我的代码,并使用暂停按钮从主活动中调用了DoctorDynamicXYDatasource类中的暂停功能,但为了等待线程,它没有同步。am是否也不允许从其他类调用暂停函数

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线程上调用pause,这确实会导致应用程序冻结

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

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();
}
调用pause将允许线程在下一次迭代时等待。调用go将允许线程立即退出等待状态


顺便说一句,除非您在线程中,否则无法强制线程暂停。

当您暂停主线程(UI线程)时,应用程序显然会冻结。我尝试了它,但仍然无法工作。它冻结了我的屏幕,几秒钟后应用程序崩溃。我尝试了一下,在按钮上的主活动中,我仍然有mDoctorDynamicXYDatasource.Pause();为什么使用currentthread是错误的?好的。在我的主活动和runnable类上的暂停按钮以及第二个类中的所有代码上,我如何从内部调用它?当我在第二节课上按下暂停键发出信号时是怎么回事??我很抱歉;这是我第一次使用线程,我有点困惑。我如何调用暂停功能并使其同步?我已经按照您的要求完成了,但仍然没有等待。我在我的代码上编辑了一些东西,请您检查一下,并告诉我这没有错,即使不起作用:)