誰かが何が悪いのか教えてくれませんか?
Handler
投稿Runnable
を使用しようとしましたが、実行されません
var mHandler: Handler? = null
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
mHandler = Handler()
var runnable = Runnable {
Log.d("TEST", "++++ runable")
Log.d("TEST", "++++ come end")
}
Log.d("TEST", "++++ runnable" + runnable)
Log.d("TEST", "++++ handle" + mHandler)
mHandler!!.post { runnable }
}
これは出力です
09-21 00:56:04.067 4419-4419 /? D /テスト:++++ runnablecom.vpioneer.activity.MainActivity$onCreate$runnable$1@529b8fb4 09-21 00:56:04.067 4419-4419 /? D /テスト:++++ handleHandler(Android.os.Handler){529b8cb4}
最初に、!!
演算子を使用しないでください。これは非常に悪い習慣です( doc から)。 ?
を使用すると、同じ動作になりますが、インスタンスを実行する前にインスタンスがnullになったかどうかを確認します。
これを言って、以下を使用します:
mHandler?.post { runnable }
実際には、実行可能な行を含む新しいラムダを作成しています。より読みやすい方法で以下を参照してください:
mHandler?.post {
runnable
}
これはJavaでは同等です。
mHandler.post(new Runnable(){
public void run(){
runnable;
}
});
これを解決するには:
オプション1:実行可能な宣言を取り除く
mHandler?.post { /*the content of your runnable*/ }
オプション2:実行可能なインスタンスを使用する
mHandler?.post(runnable) // normal parentheses
オプション3:クレイジーな方法
mHandler?.post { runnable.run() }
このコードを試してください、これが機能していることを願っています
Handler().postDelayed({
// You code and delay time
}, 1000L)
runnbale
を開始していません。これを試して:
mHandler!!.post { runnable.run() }
これも有効です:
mHandler!!.post {
Log.d("TEST", "++++ runable")
Log.d("TEST", "++++ come end")
}