web-dev-qa-db-ja.com

kotlinでpostDelayed()が使用するもの

私が知っているように、postDelayed()には2つの引数runnableとduration delayがあります。実際にkotlinの以下のコードは何をしますか:

Handler().postDelayed({
            sendMessage(MSG, params.id)
            taskFinished(params, false)
        }, duration)

ここで、1番目は2つの関数呼び出しで、2番目は継続時間の遅延です。実行可能な場所はどこですか?これはkotlinのラムダのようなものですか?誰でもこれを説明してください?

11
0xAliHn

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)
19
s1m0nw1