例として、非同期的に呼び出されるdoDelayEventAとdoEventBという2つのメソッドがあるとします。簡単にするために、doDelayEventAは一度呼び出され、doEventBは一度呼び出されると仮定します。removeCallbacksAndMessagesはシリアル化されますか?
doDelayEventAはタイマー(実際にはハンドラ)を起動し、doEventBはそれを強制終了します(まだ保留中の場合)。
private Handler mTimer;
public void doDelayEventA(){
mTimer = new Handler();
mTimer.postDelayed(new Runnable() {
public void run() {
Log.d(LOG_TAG, "Event A: We want this to happen FIRST or not at all");
}
}, 1000);
}
public void doEventB(){
if (mTimer != null) {
mTimer.removeCallbacksAndMessages(null);
}
Log.d(LOG_TAG, "Event B: If it happens, it should ALWAYS happen LAST");
}
質問:実行可能を削除または実行されるまでremoveCallbacksAndMessagesシリアル化を強制しない、それは、それが実行をブロックされませんか?両方のメソッドが呼び出されたことを保証したいと思います。EventA Logステートメントは、EventB Logステートメントより先に常に実行されるか、まったく実行されません。