gpt4 book ai didi

java - 是否有用于 java 的 Backgroundworker(例如在 .Net 中)

转载 作者:塔克拉玛干 更新时间:2023-11-02 22:21:41 24 4
gpt4 key购买 nike

Backgroundworker 使进程在后台运行而不会使应用程序滞后,我们将感谢您提供任何有关它的信息。

最佳答案

对于 Android 应用程序使用 AsyncTask

http://developer.android.com/reference/android/os/AsyncTask.html

private class DownloadFilesTask extends AsyncTask<URL, Integer, Long> {
protected Long doInBackground(URL... urls) {
int count = urls.length;
long totalSize = 0;
for (int i = 0; i < count; i++) {
totalSize += Downloader.downloadFile(urls[i]);
publishProgress((int) ((i / (float) count) * 100));
// Escape early if cancel() is called
if (isCancelled()) break;
}
return totalSize;
}

protected void onProgressUpdate(Integer... progress) {
setProgressPercent(progress[0]);
}

protected void onPostExecute(Long result) {
showDialog("Downloaded " + result + " bytes");
}
}

对于 Java swing 应用程序

对于 java swing 应用程序,使用 java.util.concurrent.ExecutorServicejavax.swing.SwingWorker

取决于你想做什么:如果您使用的是 SwingWorker,则在 doInBackground 方法完成后,将在事件调度线程上执行 done 方法。如果您使用 ExecutorService,您必须注意与 ui 相关的工作是在事件调度线程上完成的。例如。使用 SwingUtilities.invokeLater

ExecutorService 来自 javadoc 的示例

class NetworkService implements Runnable {
private final ServerSocket serverSocket;
private final ExecutorService pool;

public NetworkService(int port, int poolSize)
throws IOException {
serverSocket = new ServerSocket(port);
pool = Executors.newFixedThreadPool(poolSize);
}

public void run() { // run the service
try {
for (;;) {
pool.execute(new Handler(serverSocket.accept()));
}
} catch (IOException ex) {
pool.shutdown();
}
}
}

class Handler implements Runnable {
private final Socket socket;
Handler(Socket socket) { this.socket = socket; }
public void run() {
// read and service request on socket
}
}

SwingWorker来自 swing 教程的示例

SwingWorker worker = new SwingWorker<ImageIcon[], Void>() {
@Override
public ImageIcon[] doInBackground() {
final ImageIcon[] innerImgs = new ImageIcon[nimgs];
for (int i = 0; i < nimgs; i++) {
innerImgs[i] = loadImage(i+1);
}
return innerImgs;
}

@Override
public void done() {
//Remove the "Loading images" label.
animator.removeAll();
loopslot = -1;
try {
imgs = get();
} catch (InterruptedException ignore) {}
catch (java.util.concurrent.ExecutionException e) {
String why = null;
Throwable cause = e.getCause();
if (cause != null) {
why = cause.getMessage();
} else {
why = e.getMessage();
}
System.err.println("Error retrieving file: " + why);
}

关于java - 是否有用于 java 的 Backgroundworker(例如在 .Net 中),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17229113/

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