私が知っているように、postDelayed()には2つの引数runnableとduration delayがあります。実際にkotlinの以下のコードは何をしますか:
Handler().postDelayed({
sendMessage(MSG, params.id)
taskFinished(params, false)
}, duration)
ここで、1番目は2つの関数呼び出しで、2番目は継続時間の遅延です。実行可能な場所はどこですか?これはkotlinのラムダのようなものですか?誰でもこれを説明してください?
Handler::postDelay
ドキュメントは here にあり、メソッドが次のように定義されていることを示しています。
boolean postDelayed (Runnable r, long delayMillis)
慣用的なKotlin APIでは、両方のパラメーターの順序を変更し、関数タイプ(つまり、SAM Runnable
)を最後の引数として使用して、括弧の外に渡すことができます。ただし、対処する必要がある場合もあるので、例を見てみましょう。
Handler().postDelayed({
sendMessage(MSG, params.id)
taskFinished(params, false)
}, duration)
中括弧で囲まれた最初の引数は、 SAM Conversion のおかげでRunnable
になるラムダです。これをローカル変数に抽出することで、より明確にすることができます。
val r = Runnable {
sendMessage(MSG, params.id)
taskFinished(params, false)
}
Handler().postDelayed(r, duration)