Android
Tråd
Sök…
Trådexempel med dess beskrivning
När en applikation startas körs först huvudtråden. Den här huvudtråden hanterar alla UI-applikationer. Om vi vill köra länge den uppgift som vi inte behöver UI använder vi tråd för att köra den uppgiften i bakgrunden.
Här är exemplet på tråd som beskriver slag:
new Thread(new Runnable() {
public void run() {
for(int i = 1; i < 5;i++) {
System.out.println(i);
}
}
}).start();
Vi kan skapa tråd genom att skapa objektet för tråd som har Thread.run()
för att köra thread.Here, run()
-metoden kallas av metoden start()
.
Vi kan också köra flera trådar oberoende, vilket kallas MultiThreading. Denna tråd har också funktionaliteten för sömn genom vilken den nuvarande exekverande tråden till sömn (tillfälligt upphör körning) under det angivna antalet tid. Men sömn kastar InterruptException Så vi måste hantera det genom att använda try / catch så här.
try{Thread.sleep(500);}catch(InterruptedException e){System.out.println(e);}
Uppdatera användargränssnittet från en bakgrundstråd
Det är vanligt att använda en bakgrundsgänga för att utföra nätverksoperationer eller uppgifter som körs länge och sedan uppdatera användargränssnittet med resultaten vid behov.
Detta utgör ett problem, eftersom bara huvudtråden kan uppdatera användargränssnittet.
Lösningen är att använda runOnUiThread()
, eftersom den låter dig initiera kodkörning på UI-tråden från en bakgrundstråd.
I detta enkla exempel startas en tråd när aktiviteten skapas, körs tills det magiska antalet 42
genereras slumpmässigt och använder sedan runOnUiThread()
för att uppdatera gränssnittet när detta villkor är uppfyllt.
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();
}
}