gpt4 book ai didi

java - Looper 泄露消息

转载 作者:行者123 更新时间:2023-11-30 03:00:13 25 4
gpt4 key购买 nike

所以我有这个循环器,我用它来执行长时间运行的任务。我将 Worker 对象传递给它,它本质上是一个 Runnable 的包装器

我注意到它似乎正在泄漏大小完全相同的 Message 对象

知道为什么会发生这种情况吗?

线程:

public class WorkerQueue extends Thread {
public Handler handler;
int priority = Thread.MIN_PRIORITY + 1;
private static WorkerQueue self = null;

public static WorkerQueue getInstance() {
if (self == null) {
self = new WorkerQueue();
self.start();
self.setPriority(priority);
}

return self;
}

@Override
public void run() {
Looper.prepare();
handler = new Handler();
handler.getLooper().getThread().setPriority(priority);
Looper.loop();
}

public synchronized void enqueueTask(final Worker task) {
handler.post(new Runnable() {
@Override
public void run() {
task.run();
}
});
}
}

最佳答案

根据 android 文档,您应该使用 ThreadPoolExecutor为了这。

你可以这样做:

ExecutorService executor = Executors.newCachedThreadPool(); //or whatever you think is best, read the Javadocs for the different options under Executors
executor.execute(new Runnable() {
@Override
public void run() {
//implement long running task here
}
});

让您当前的 Worker 类实现 Runnable 应该不难,然后您可以将它们直接传递给 execute 方法。

当然,如果你愿意,你总是可以重写 Java 的 ExecutorService(这似乎是你正在做的),但你不太可能最终会变得更好。

关于java - Looper 泄露消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22648721/

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