こんにちは、ランダムな情報で毎秒GUIを更新するためにハンドラを使用しようとしています - 情報はタイマーだけではありません。私はいくつかのハンドラを作成しており、2番目のハンドラはその仕事に使うと仮定しています。ハンドラをタイマーとして機能させる
ここで私が間違っていると私を訂正してください: 各ハンドラは1つのスレッドに関連付けられています。つまり、ハンドラが作成されたスレッドです。したがって、onCreate()メソッドでハンドラを作成すると、GUIスレッドにアタッチされます。メインスレッド したがって、タスク/メッセージ/メソッドを特定の時間に実行させるには、handler.postDelayed()メソッドを使用する必要があります。以下は、私のコードの抜粋です:
// Button to use handler - commence when pressed
handler2Btn = (Button)findViewById(R.id.handler2_Btn);
handler2Btn.setOnClickListener(new View.OnClickListener()
{
@Override
public void onClick(View v)
{
new Thread()
{
@Override
public void run()
{
// Create a new thread which will get the message from handler 1 and send it
// when the button has been clicked
Message msg2 = handler2.obtainMessage(1,"New Message for Handler 2");
handler2.sendMessage(msg2);
// Remove any callbacks (messages pending)
handler2.removeCallbacks(this);
handler2.postDelayed(updateGUI(), 1000);
} // End Run
}.start();// Start the Thread
}// End on Click
});
そして、GUIを更新し、タイマーなどのTextViewに割り当てられた行為を確実に行動すると仮定されてupdateGUI()メソッド:
private Runnable updateGUI()
{
return new Runnable()
{
// Do this every second
@Override
public void run()
{
handlerLabelTxt2.append(""+j);
j++;
}
};
}
しかし、どのようなイム取得ボタンを押すと、GUIは更新されますが、毎秒更新されません。ボタンを使用してプロセスを開始するが、そのプロセスをタイマーのように動作させ続けることが意図されている。
postDelayed()メソッドをonCreate()メソッドの本体に移動する必要がありますか?ハンドラが私を混乱させているので、私はここで少し助けが必要です!
おかげ
あなたはhandler2.postDelayed(updateGUI()、1000)を追加したことがあります。 updateGUI()関数内のrun()メソッドの最後まで? –
私はすぐにそれを試してみませんでした – Katana24
それを試しても動作しません。 – Katana24