345 votes

Qu'est-ce que j'utilise maintenant que Handler() est obsolète ?

Comment corriger l'avertissement de dépréciation dans ce code ? Sinon, existe-t-il d'autres options pour le faire?

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

655voto

Nikunj Paradva Points 2234

Seul le constructeur sans paramètre est déprécié, il est maintenant préférable de spécifier le Looper dans le constructeur via la méthode Looper.getMainLooper()

Utilisez-le pour Java

 new Handler(Looper.getMainLooper()).postDelayed(new Runnable() {
    @Override
    public void run() {
        // Your Code
    }
}, 3000);

Utilisez-le pour Kotlin

 Handler(Looper.getMainLooper()).postDelayed({
    // Your Code
}, 3000)

77voto

Nicolas Jafelle Points 484

Si vous voulez éviter la vérification nulle dans Kotlin ( ? ou !! ), vous pouvez utiliser Looper.getMainLooper() si votre Handler fonctionne avec quelque chose liée à l'interface utilisateur, comme ceci :

 Handler(Looper.getMainLooper()).postDelayed({
   Toast.makeText(this@MainActivity, "LOOPER", Toast.LENGTH_SHORT).show()
}, 3000)

Remarque : utilisez requireContext() au lieu de this@MainActivity si vous utilisez fragment.

29voto

Gabe Sechan Points 23732

La fonction déconseillée est ce constructeur pour Handler. Utilisez plutôt Handler(Looper.myLooper()) .postDelayed(runnable, delay)

24voto

Francesc Points 4494

Pensez à utiliser des coroutines

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X