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

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

当前回答

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

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

其他回答

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

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

Handler()和Handler(Handler.)回调回调)构造函数已弃用。因为这可能会导致bug和崩溃。显式使用Executor或Looper。

对于Java

Handler handler = new Handler(Looper.getMainLooper());
handler.postDelayed(new Runnable() {
  @Override
  public void run() {
    //do your work here
   }
}, 1000);

考虑使用协程

scope.launch {
    delay(3000L)
    // do stuff
}

在Handler构造函数中提供一个循环器

Handler(Looper.getMainLooper())

我通常用这个

代码:

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

截图: