2017-06-26 12 views
0

サーフェイスビューを使用せずにゲームループを作成してテストしていますが、スレッドを連続して実行できません。下のコードでは、テキストビューに連続して減少する数字が表示されることを期待していますが、一度しか表示されません。Androidスレッド停止

public class ActivityGameTest extends AppCompatActivity { 
int bigNumber = Integer.MAX_VALUE; 
Thread gameThread; 
TextView myText; 
private Handler uiHandler; 
boolean mRun; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_game_test); 
    myText = (TextView) findViewById(R.id.txtHello); 
    uiHandler = new Handler(); 

    gameThread = new Thread(null, processFrame, "ProcessFrame"); 
    mRun = true; 
    gameThread.start(); 
} 

private Runnable processFrame = new Runnable() { 

    @Override 
    public void run() { 
     while (mRun) { 
      updateFrame(); 

// EDIT - UIにこれらの行を追加し

try { 
       sleep(100); 
      } catch (InterruptedException e) { 
       e.printStackTrace(); 
      } 


     } 
    } 
}; 

private void updateFrame() { 
    bigNumber--; 
    uiHandler.post(showFrame); 
} 

private Runnable showFrame = new Runnable() { 
    @Override 
    public void run() { 
     myText.setText(Integer.toString(bigNumber)); 
    } 
}; 

}

+0

このコードは私のために働いています。問題の解決策を見つけましたか?たぶん、あなたはスレッドでスリープを使用し、それが本当に動作することをテストすることができます。 – Krish

+0

ありがとう@キリスト睡眠を追加すると問題は解決しますが、なぜですか? – NiMuSi

+0

遅延なしでUIを無限ループで更新しているため、UIスレッドはビジー状態になりすぎてTextviewを更新できず、フレームをスキップします。あなたが変更を見ることができないように。 – Krish

答えて

0

アップデートは、AndroidのUIスレッドで実行する必要があります としてはhereを指摘...、あなたが呼び出しをラップすることができます関数内のアンドロイドスレッドに渡し、必要に応じて呼び出します。

関連する問題