Android
Draad
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();
}
}