私は、firstrollSPの最後のブレースがスコープを終えるまで、私のpushTextが私のEditTextに表示されない場所で遅延が発生しています。 pushGreenTextは、私が書いたUIスレッドのカスタム関数で、XMLでEditTextにSurfaceViewをオーバーレイするテキストを追加します。私は、moveWholeAITurnのシーケンス全体を待つ代わりに、緑色のテキストがすぐに表示されるようにしたいと考えています。それを達成する方法はありますか?私はfirstrollSPをスレッディングしようとしましたが、まだ遅延があり、私は多分pushGreenTextをスレッディングすることを考えましたが、それはまだ答えがわかりません。 UIスレッドがイベントループですので 私の機能の遅延のトラブルシューティング
は 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の中で実行します(基本的にUIスレッドのハンドラにランナブルをポストしてそこでコードを実行するので、その関数を呼び出すためにUIスレッドにメッセージをポストします)。 –
私はMainActivity.activityの代わりにインタフェースを使用することを考えていましたが、それらを組み合わせるのは難しいです。 – Giuseppe