我希望能够在指定的延迟后调用以下方法。 在objective c中,有这样的东西:

[self performSelector:@selector(DoSomething) withObject:nil afterDelay:5];

在android和java中是否有类似的方法? 例如,我需要能够在5秒后调用一个方法。

public void DoSomething()
{
     //do something here
}

当前回答

我更喜欢使用View.postDelayed()方法,下面是简单的代码:

mView.postDelayed(new Runnable() {
    @Override
    public void run() {
        // Do something after 1000 ms
    }
}, 1000);

其他回答

更安全-与Kotlin协程

大多数答案使用Handler,但我给出了一个不同的解决方案来延迟活动,片段,视图模型与Android Lifecycle ext.这种方式将自动取消生命周期开始破坏-避免泄漏内存或崩溃的应用程序

在活动或片段中:

lifecycleScope.launch { 
  delay(DELAY_MS)
  doSomething()
}

在ViewModel:

viewModelScope.lanch {
  delay(DELAY_MS)
  doSomething()
}

在挂起函数:(Kotlin协程)

suspend fun doSomethingAfter(){
    delay(DELAY_MS)
    doSomething()
}

如果您得到一个错误,lifecycleScope没有找到!-将这个依赖导入到应用的gradle文件中:

implementation "androidx.lifecycle:lifecycle-runtime-ktx:2.4.0"

科特林

Handler(Looper.getMainLooper()).postDelayed({
    //Do something after 100ms
}, 100)

Java

final Handler handler = new Handler(Looper.getMainLooper());
handler.postDelayed(new Runnable() {
    @Override
    public void run() {
        //Do something after 100ms
    }
}, 100);

要导入的类是android.os.handler。

如果你使用RxAndroid,那么线程和错误处理就会变得容易得多。以下代码在延迟后执行

Observable.timer(delay, TimeUnit.SECONDS)
        .subscribeOn(Schedulers.io())
        .observeOn(AndroidSchedulers.mainThread())
        .subscribe(aLong -> {
            // Execute code here
        }, Throwable::printStackTrace);

在Android中,我们可以编写下面的kotlin代码来延迟任何函数的执行

class MainActivity : AppCompatActivity() {

private lateinit var handler: Handler

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_main)
    handler= Handler()
    handler.postDelayed({
        doSomething()
    },2000)
}

private fun doSomething() {
    Toast.makeText(this,"Hi! I am Toast Message",Toast.LENGTH_SHORT).show()
}
}

使用Kotlin,我们可以通过执行以下操作来实现

Handler().postDelayed({
    // do something after 1000ms 
}, 1000)