У меня есть задержка, когда мой pushGreentText не отображается в моем EditText до тех пор, пока последняя скобка firstrollSP не выйдет из области. pushGreenText - это настраиваемая функция в потоке пользовательского интерфейса, которую я написал, который добавляет текст в мой EditText в XML, который накладывает SurfaceView. Я хочу, чтобы сразу появился зеленый текст, а не ожидал всей последовательности moveWholeAITurn. Есть ли способ сделать это? Я попробовал threading firstrollSP, но все еще есть задержка, и я подумал о том, что, возможно, прошивка pushGreenText, но я не уверен, что это ответ.Устранение задержек в моей функции
Спасибо ...
static synchronized public void firstRollSP() throws InterruptedException
{
//Roll for Player and announce
mGame.mDice.setDie1(mGame.mDiceFirstRoll.getDie1());
mGame.mDice.setRolled(true);
MainActivity.activity.pushTextGreen(Strings.get_First_roll_X_Die1());
//Roll for two and announce
Thread one = new Thread()
{
public void run()
{
try
{
Thread.sleep(2000);
mGame.mDice.setDie2(mGame.mDiceFirstRoll.getDie2());
while(mGame.mDice.getDie1() == mGame.mDice.getDie2())
mGame.mDice.setDie2((mRng.nextInt(6) + 1));
}
catch(InterruptedException e)
{
Log.d("ACtionUP", "Interupted e");
}
}
};
one.start();
one.join();
MainActivity.activity.pushTextGreen("Android first roll is " + Integer.toString(mGame.mDice.getDie2()));
if(H.initWonFirstRoll())
{
MainActivity.activity.pushTextGreen("Player won first roll.");
Thread tInitWon = new Thread()
{
public void run()
{
try
{
Thread.sleep(2000);
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();
mGame.mPossibleIndexes.calcPossibleTriangles();
}
catch(Exception e)
{
Log.d("ACtionUP", "Interupted e");
}
}
};
tInitWon.start();
tInitWon.join();
}
else
{
MainActivity.activity.pushTextGreen("Android won first roll.");
Thread tDroidWon = new Thread()
{
public void run()
{
try
{
Thread.sleep(2000);
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());
Thread.sleep(2000);
mGameAI.mPossibleIndexes.calcPossibleTrianglesAI();
}
catch(InterruptedException e)
{
Log.d("ACtionUP", "Interupted e");
}
}
};
tDroidWon.start();
tDroidWon.join();
if(mGameAI.mPossibleIndexes.anyPossibles())
{
moveWholeTurnAI();
}
else
{
H.endTurnAI();
}
}
}
Если pushGreenText относится к основной деятельности, то как вызвать ее из потока без исключения исключения? – Giuseppe
Вы делаете это внутри runOnUIThread (который в основном отправляет runnable обработчику в потоке пользовательского интерфейса и запускает там код. Таким образом, вы отправляете сообщение в поток пользовательского интерфейса для вызова этой функции). –
Я думал, что альтернатива MainActivity.activity - использовать интерфейс, однако их сложнее собрать. – Giuseppe