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类上的暂停按钮以及第二个类中的所有代码上,我如何从内部调用它?当我在第二节课上按下暂停键发出信号时是怎么回事??我很抱歉;这是我第一次使用线程,我有点困惑。我如何调用暂停功能并使其同步?我已经按照您的要求完成了,但仍然没有等待。我在我的代码上编辑了一些东西,请您检查一下,并告诉我这没有错,即使不起作用:)