私はAndroid SurfaceViewのonTouchEventからこの関数を呼び出しています。関数pushGreenTextは、SurfaceViewのXMLオーバーレイの一部であるEditTextに文字列をプッシュするカスタム関数です。すべての作業がUIスレッドで実行されているように見えます。私が見ている私には奇妙な行動があります。何らかの理由で、firstRollSPが実行されスコープから外されるまで、テキストがプッシュされているとは見えません。私が達成しようとしているのは、firstRollSPの最後の中括弧が終了するのを待つことなく、すぐにプッシュされたテキストを見る状況です。コード内の他の場所では、pushGreenTextは即座に動作しますが、何らかの理由でこの関数に遅延があります。UIスレッドの遅延のトラブルシューティング
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();
}
}
}
ない答えが、 'ランダムmRngは=新しいランダム()移動;' 'while'ループの外に各ループに' mRng'オブジェクトを再作成するよりも良いかもしれに。 – Tigger