Recherche…


Exemple de fil avec sa description

Lors du lancement d'une application, tout d'abord, le thread principal est exécuté. Ce thread principal gère tout le concept d'application de l'interface utilisateur. Si nous voulons exécuter longtemps la tâche dans laquelle nous n'avons pas besoin de l'interface utilisateur, nous utilisons le thread pour exécuter cette tâche en arrière-plan.

Voici l'exemple de Thread qui décrit le coup:

new Thread(new Runnable() {
    public void run() {
        for(int i = 1; i < 5;i++) {  
            System.out.println(i);  
        }
    }
}).start();

Nous pouvons créer un thread en créant l'objet de Thread qui a la méthode Thread.run() pour exécuter le thread. Ici, la méthode run() est appelée par la méthode start() .

Nous pouvons également exécuter les threads multiples de manière indépendante, appelée MultiThreading. Ce thread a également la fonctionnalité de veille par laquelle le thread en cours d'exécution s'endort (arrête temporairement l'exécution) pour le nombre de fois spécifié. Mais le sommeil lance l'InterruptedException Donc, nous devons le gérer en utilisant try / catch comme ça.

try{Thread.sleep(500);}catch(InterruptedException e){System.out.println(e);}

Mise à jour de l'interface utilisateur à partir d'un thread d'arrière-plan

Il est courant d'utiliser un thread d'arrière-plan pour effectuer des opérations réseau ou des tâches longues, puis mettre à jour l'interface utilisateur avec les résultats si nécessaire.

Cela pose un problème, car seul le thread principal peut mettre à jour l'interface utilisateur.

La solution consiste à utiliser la méthode runOnUiThread() , car elle vous permet de lancer l'exécution de code sur le thread d'interface utilisateur à partir d'un thread d'arrière-plan.

Dans cet exemple simple, un thread est démarré lors de la création de l'activité, s'exécute jusqu'à ce que le nombre magique de 42 soit généré de manière aléatoire, puis utilise la méthode runOnUiThread() pour mettre à jour l'interface une fois cette condition remplie.

public class MainActivity extends AppCompatActivity {

    TextView mTextView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        mTextView = (TextView) findViewById(R.id.my_text_view);

        new Thread(new Runnable() {
            @Override
            public void run() {
                while (true) {
                    //do stuff....
                    Random r = new Random();
                    if (r.nextInt(100) == 42) {
                       break;
                    }
                }

                runOnUiThread(new Runnable() {
                    @Override
                    public void run() {
                        mTextView.setText("Ready Player One");
                    }
                });
            }
        }).start();
    }
}


Modified text is an extract of the original Stack Overflow Documentation
Sous licence CC BY-SA 3.0
Non affilié à Stack Overflow