4秒でテキストフィールドを更新する必要がある単純なタスクをスケジュールしています。
ただし、これが呼び出されるたびに、アクティビティは一時停止し、アクティビティを再開するまでテキストフィールドに値が表示されません。
private void showDelayedValue() {
Runnable longRunningTask = new Runnable() {
public void run() {
int randomVal = randomNumberGenerator.nextInt(30 - -10) - 10; //random number between -10 and 30
String randomValStr = Integer.toString(randomVal);
Log.i(this.getClass().getSimpleName(),
"FIRED startScheduler: " + randomValStr);
theFieldOnScreenTV.setText(randomTempStr);
}
};
//show the value in 2 seconds
scheduledTaskExecutor.schedule(longRunningTask, 4, TimeUnit.SECONDS);
}
ログは次のことを示しています。
FIRED startScheduler: 4
しかし、更新しませんTextView theFieldOnScreenTV
代わり に、LogCatに表示されたonPause
直後に呼び出されます。Fired startScheduler:
どうもありがとう!
編集:
これは、アレックスのアプローチに従って私のために働きました:
private void showDelayedValue() {
int randomX = randomNumberGenerator.nextInt(30 - -10) - 10;
final String randomXStr = Integer.toString(randomX);
final Runnable updateFieldR = new Runnable() {
public void run() {
theFieldOnScreenTV.setText(randomXStr);
}
};
Runnable longRunningTask = new Runnable() {
public void run() {
theFieldOnScreenTV.post(updateFieldR);
}
};
scheduledTaskExecutor.schedule(longRunningTask, 4, TimeUnit.SECONDS);
}