Ricerca…


Esempio di discussione con la sua descrizione

Durante l'avvio dell'applicazione, viene eseguito innanzitutto il thread principale. Questo thread principale gestisce tutto il concetto di applicazione dell'interfaccia utente. Se vogliamo eseguire a lungo l'attività in cui non abbiamo bisogno dell'interfaccia utente, usiamo thread per eseguire quell'attività in background.

Ecco l'esempio di Thread che descrive blow:

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

Possiamo creare thread creando l'oggetto di Thread che ha il metodo Thread.run() per eseguire il thread. Il metodo run() viene chiamato dal metodo start() .

Possiamo anche eseguire indipendentemente più thread, che è noto come MultiThreading. Questo thread ha anche la funzionalità di sleep con cui il thread attualmente in esecuzione viene sospeso (interruzione temporanea dell'esecuzione) per il numero di volte specificato. Ma il sonno lancia l'InterruptedException Quindi, dobbiamo gestirlo usando try / catch come questo.

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

Aggiornamento dell'interfaccia utente da un thread in background

È comune utilizzare un thread in background per eseguire operazioni di rete o attività a esecuzione prolungata, quindi aggiornare l'interfaccia utente con i risultati quando necessario.

Questo pone un problema, in quanto solo il thread principale può aggiornare l'interfaccia utente.

La soluzione è utilizzare il metodo runOnUiThread() , poiché consente di avviare l'esecuzione del codice sul thread dell'interfaccia utente da un thread in background.

In questo semplice esempio, una discussione viene avviata quando l'attività viene creata, viene eseguita fino a quando il numero magico 42 viene generato casualmente e quindi utilizza il metodo runOnUiThread() per aggiornare l'interfaccia utente una volta soddisfatta questa condizione.

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
Autorizzato sotto CC BY-SA 3.0
Non affiliato con Stack Overflow