Je n'ai pas beaucoup d'expérience en Java, mais d'après ce que je sais, un Runnable n'est qu'une interface qui obligera la classe à implémenter la fonction run() avec du code, qui serait exécuté dans le thread appelant.
J'aime souvent utiliser cette fonctionnalité dans une fonction comme celle-ci :

 public static void sleepAndRunOnUiThread(int millis,@NonNull Runnable action,@NonNull Activity activity) {
        Log.e(TAG, "sleepAndRunOnUiThread: recieved millis="+millis);
        Log.e(TAG, "sleepAndRunOnUiThread: recieved Runnable action="+action.toString());
        new Thread(() -> {
            try {
                Thread.sleep(millis);
                activity.runOnUiThread(action);

            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }).start();

    }

Une fonction simple qui pourrait être utilisée pour exécuter des choses sur le thread d'interface utilisateur après un délai. mais existe-t-il un moyen d'imprimer les lignes de code dans l'exécutable action donné ?

0
ansh sachdeva 9 févr. 2020 à 00:57

1 réponse

Meilleure réponse

Comme l'a dit @CommonsWare, nous ne pouvons pas simplement imprimer le code source tel qu'il est. et oui, je passe maintenant une instance de IllegalStateException pour identifier la classe appelante (une sorte de hack mais fonctionne)


 public static void sleepAndRunOnUiThread(int millis,@NonNull Runnable action,Exception eCaller,@NonNull Activity activity) {
        Log.e(TAG, "sleepAndRunOnUiThread: recieved millis="+millis);
        Log.e(TAG, "sleepAndRunOnUiThread: recieved Runnable action from ="+eCaller.getMessage()); // i pass description of action here
        new Thread(() -> {
            try {
                Thread.sleep(millis);
                activity.runOnUiThread(action);

            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }).start();

    }
0
ansh sachdeva 9 avril 2020 à 20:39