Zoeken…


Thread Voorbeeld met zijn beschrijving

Bij het starten van een applicatie wordt eerst de hoofdthread uitgevoerd. Deze hoofdthread behandelt het hele UI-toepassingsconcept. Als we de taak waarin we de gebruikersinterface niet nodig hebben lang willen uitvoeren, gebruiken we thread voor het uitvoeren van die taak op de achtergrond.

Hier is het voorbeeld van Thread dat blow beschrijft:

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

We kunnen thread maken door het object Thread te maken met de methode Thread.run() voor het uitvoeren van de thread. Hier run() methode run() aangeroepen door de methode start() .

We kunnen ook de meerdere threads onafhankelijk uitvoeren, ook wel MultiThreading genoemd. Deze thread heeft ook de functionaliteit van slaap waardoor de momenteel uitvoerende thread in slaap staat (de uitvoering tijdelijk staken) voor het opgegeven aantal keren. Maar slaap gooit de InterruptedException dus we moeten ermee omgaan door try / catch als volgt te gebruiken.

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

De gebruikersinterface bijwerken vanaf een achtergrondthread

Het is gebruikelijk om een achtergrondthread te gebruiken voor netwerkbewerkingen of langlopende taken en vervolgens de gebruikersinterface bij te werken met de resultaten indien nodig.

Dit vormt een probleem, omdat alleen de hoofdthread de gebruikersinterface kan bijwerken.

De oplossing is om de methode runOnUiThread() gebruiken, omdat hiermee code kan worden uitgevoerd op de UI-thread vanuit een achtergrondthread.

In dit eenvoudige voorbeeld wordt een thread gestart wanneer de activiteit wordt gemaakt, wordt deze uitgevoerd totdat het magische getal 42 willekeurig wordt gegenereerd en wordt vervolgens de methode runOnUiThread() gebruikt om de gebruikersinterface bij te werken zodra aan deze voorwaarde is voldaan.

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
Licentie onder CC BY-SA 3.0
Niet aangesloten bij Stack Overflow