Yes,memory leaks realy exist!,please read this code snipped in Worker.java:
for (runningTaskIndex = 0; runningTaskIndex < tasks.size(); ++runningTaskIndex)
{
task = (WorkerTask) tasks.elementAt(runningTaskIndex);
if (task.run())
{
tasks.removeElementAt(runningTaskIndex);
runningTaskIndex--;
}
}
We can see,if task.run() returns false,then the task will NEVER remove from the tasks list!!
but the setCurrent() method just modified can NOT direct return true,it will result some incomplete redrawing concern!
WorkerTask repaintTask = new WorkerTask() {
public boolean run() {
Kuix.getCanvas().repaint();
return false;
}
};
Worker.instance.pushTask(repaintTask);
so, I give the following solution:
Worker.instance.pushTask(new WorkerTask()
{
public boolean run()
{
Kuix.getCanvas().repaint();
if (!isInWidgetTree())
{
return true;
}
return false;
}
});
if the screen widget not in widget tree(maybe removed from its parent),then the task can safely remove from tasks list.
BTW:pls forgive my poor English ;-)

