gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 07:57:48 24 4
gpt4 key购买 nike

我试图暂停一个线程然后恢复它,但是当我暂停时它会卡住应用程序。我尝试了几件事,但没有运气。在我的主要 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com