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


Modified text is an extract of the original Stack Overflow Documentation
Licensierat under CC BY-SA 3.0
Inte anslutet till Stack Overflow