你如何告诉一个函数在 Kotlin 中等待几秒钟?

Posted

技术标签:

【中文标题】你如何告诉一个函数在 Kotlin 中等待几秒钟?【英文标题】:How do you tell a function to wait a few seconds in Kotlin? 【发布时间】:2019-10-24 11:47:22 【问题描述】:

这里是 android Studio 中的 Kotlin。

我正在尝试让 imageView 淡入主视图,等待几秒钟,然后淡出。在我的一生中,我找不到任何关于暂停或等待的文档。快把我逼疯了。

如何让我的函数冷静下来并等待 3 秒,然后继续执行函数的其余代码?

理想情况下,我会在:

imageView.startAnimation(animIn)
imageView.startAnimation(animOut)

非常感谢任何帮助!

动物园

【问题讨论】:

【参考方案1】:

你可以使用Handler,

Handler().postDelayed(Runnable  
    //anything you want to start after 3s
, 3000)

【讨论】:

我收到一个错误:无法访问 它在“处理程序”中受到保护/*保护和打包*/ 抱歉,我是菜鸟。 :L 我认为你使用了错误的Handler类,确保顶部有import android.os.Handler,也许你使用java.util.logging.Handler【参考方案2】:

因为这是特定于 Kotlin 而不仅仅是 Android。为什么不使用coroutines?

GlobalScope.launch 
    imageView.startAnimation(animIn)
    delay(3_000L)
    imageView.startAnimation(animOut)

这是一个幼稚的示例,在 GlobalScope 上启动,设置/了解协程的一些开销可能意味着它不适合您的用例。但是如果你已经在你的应用中使用协程,或者期望在未来使用,那么这段代码的意图就很清楚了。

【讨论】:

我确信这可能会实现我的目标,但我对协程几乎一无所知【参考方案3】:

导入 android.os.Handler 并尝试以下操作:

Handler handler = new Handler();
        handler.postDelayed(new Runnable() 
            public void run() 
                // yourAnimationMethod();
            
        , 1000); // 1000 milliseconds

如果您正在寻找单线,您可以尝试:

(new Handler()).postDelayed(this::yourAnimationMethod, 1000); // 1000 milliseconds

【讨论】:

如果您使用的是 Kotlin,您可能需要将 Java 转换为 Kotlin 才能使其正常工作。请参考androidride.com/convert-java-class-to-kotlin-android-studio【参考方案4】:

你可以使用:

Timer("SettingUp", false).schedule(timeyouwant_in_milleseconds)  
   imageView.startAnimation(animOut)

【讨论】:

【参考方案5】:

停止主线程几秒钟不是一个好主意。 您可以改用处理程序。 下面的代码将创建一个任务,该任务将在延迟后执行。 run() 方法中的任何内容都将在延迟后执行。

new Handler().postDelayed(new Runnable()

   @Override
   public void run()
   
     imageView.startAnimation(animOut)
   
, 3000);

【讨论】:

这是在 Java 中。这个问题是专门针对 Kotlin 的。 :-)

以上是关于你如何告诉一个函数在 Kotlin 中等待几秒钟?的主要内容,如果未能解决你的问题,请参考以下文章

让 promise 在返回前等待几秒钟

在不阻塞 UI 执行的情况下等待几秒钟

在java一个方法中,如何让一行代码执行完毕以后等待几秒钟后再执行另一行代码 主要 是一个方法中

让lua脚本等待/暂停/睡眠/阻塞几秒钟的最简单方法?

让lua脚本等待/暂停/睡眠/阻塞几秒钟的最简单方法?

bash 脚本:自上次运行后等待几秒钟