如何修复此代码中的弃用警告?或者,还有其他的选择吗?

Handler().postDelayed({
    context?.let {
        //code
    }
}, 3000)

当前回答

我通常用这个

代码:

Handler(Looper.myLooper() ?: return).postDelayed({
           // Code what do you want
        }, 3000)

截图:

其他回答

使用这个

Looper.myLooper()?.let {
    Handler(it).postDelayed({
        //Your Code
    },2500)
}

使用Executor而不是handler获取更多信息。 使用ScheduledExecutorService实现post delay:

ScheduledExecutorService worker = Executors.newSingleThreadScheduledExecutor();
Runnable runnable = () -> {
    public void run() {
        // Do something
    }
};
worker.schedule(runnable, 2000, TimeUnit.MILLISECONDS);

我有三个解决方案:

显式地指定Looper: 处理程序(Looper.getMainLooper ()) .postDelayed ({ / /代码 },持续时间) 指定隐式线程本地行为: 处理程序(Looper.myLooper () ! !) .postDelayed ({ / /代码 },持续时间) 使用线程: 线程({ 尝试{ thread . sleep (3000) } catch (e:异常){ 把e } / /代码 }).start ()

import android.os.Looper
import android.os.Handler

inline fun delay(delay: Long, crossinline completion: () -> Unit) {
    Handler(Looper.getMainLooper()).postDelayed({
        completion()
    }, delay)
}

例子:

delay(1000) {
    view.refreshButton.visibility = View.GONE
}

我通常用这个

代码:

Handler(Looper.myLooper() ?: return).postDelayed({
           // Code what do you want
        }, 3000)

截图: