Ich rufe diese Funktion aus dem onTouchEvent meines Android-SurfaceView. Die Funktion pushGreenText ist eine benutzerdefinierte Funktion, die ich schrieb, die einen String in einen EditText schiebt, der Teil meiner XML-Überlagerung für das SurfaceView ist. Es sieht für mich so aus, als ob die ganze Arbeit auf dem UI-Thread ausgeführt wird. Es gibt ein Verhalten, das mir fremd ist, sehe ich. Aus irgendeinem Grund sehe ich den Text nicht als gedrängt bis nach der Ausführung von FirstRollSP und außerhalb des Bereichs. Was ich versuche zu erreichen, ist eine Situation, in der ich den Text sofort als verschoben sehe, ohne zu warten, bis die letzte geschweifte Klammer von firstRollSP fertig ist. An allen anderen Stellen im Code funktioniert pushGreenText sofort, aber aus irgendeinem Grund gibt es in dieser Funktion die Verzögerung.Fehlerbehebung für eine Verzögerung des UI-Threads
static synchronized public void firstRollSP() throws InterruptedException {
mGame.mDice.setDie1(mGame.mDiceFirstRoll.getDie1());
mGame.mDice.setRolled(true);
MainActivity.activity.pushTextGreen(Strings.get_First_roll_X_Die1());
H.waitms(2000);
mGame.mDice.setDie2(mGame.mDiceFirstRoll.getDie2());
while(mGame.mDice.getDie1() == mGame.mDice.getDie2())
{
Random mRng = new Random();
int dProposedDie = mRng.nextInt(6) + 1;
mGame.mDice.setDie2(dProposedDie);
}
MainActivity.activity.pushTextGreen("Android rolled " + Integer.toString(mGame.mDice.getDie2()));
H.waitms(2000);
if(H.initWonFirstRoll())
{
MainActivity.activity.pushTextGreen("Player won first roll.");
mGame.isFirstRoll = false;
mGame.isTurn = true;
mGameAI.isFirstRoll = false;
mGameAI.isTurn = false;
mGame.mDice.sort();
mGame.mDice.setRolled(true);
mGame.mDice.setDiceAnimationComplete(true);
mGame.mOppDice.init();
}
else
{
MainActivity.activity.pushTextGreen("Android won first roll.");
mGame.isFirstRoll = false;
mGame.isTurn = false;
mGameAI.isFirstRoll = false;
mGameAI.isTurn = true;
mGameAI.mDice.init();
mGame.mOppDice.init();
mGame.mDice.sort();
mGameAI.mDice.setDie1(mGame.mDice.getDie1());
mGameAI.mDice.setDie2(mGame.mDice.getDie2());
mGame.mOppDice.setDie1(mGame.mDice.getDie1());
mGame.mOppDice.setDie2(mGame.mDice.getDie2());
H.waitms(2000);
mGameAI.mPossibleIndexes.calcPossibleTrianglesAI();
if(mGameAI.mPossibleIndexes.anyPossibles())
{
moveWholeTurnAI();
}
else
{
H.endTurnAI();
}
}
}
keine Antwort, aber bewegend 'Random mRng = new Random();' aus dem 'while' Schleife besser sein kann auf jeder Schleife das' mRng' Objekt als neu zu erstellen. – Tigger