I decided to do as such... altough I find it's inelegant, it works.
public void loseAndRestart(){
if(runnableDone){
if(livesLost>2){
saveHigh();
youLooseStartAgainPrompt(0);
} else if (youLooseScreen){
youLooseScreen = false;
scoreTally.reset();
lifeTally.firstInit();
} else {
scoreTally.reattach();
lifeTally.init();
}
if(!youLooseScreen){
diddly.init();
craneEngine.purgeAndInit();
torch.init();
pipeNDrops.init();
lifeLost = false;
}
runnableDone = false;
} else {
activity.getEngine().runOnUpdateThread(new Runnable(){
public void run() {
detachChildren();
runnableDone = true;
loseAndRestart();
}
});
}
}