Szukaj…


Przykład wątku z jego opisem

Podczas uruchamiania aplikacji najpierw wykonywany jest główny wątek. Ten wątek główny obsługuje całą koncepcję aplikacji interfejsu użytkownika. Jeśli chcemy długo wykonywać zadanie, w którym nie potrzebujemy interfejsu użytkownika, używamy wątku do uruchamiania tego zadania w tle.

Oto przykład wątku opisującego cios:

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

Możemy utworzyć wątek, tworząc obiekt Thread, który ma metodę Thread.run() do uruchomienia wątku. Tutaj metoda run() jest wywoływana przez metodę start() .

Możemy także uruchomić wiele wątków niezależnie, co jest znane jako MultiThreading. Wątek ten ma również funkcję uśpienia, dzięki której aktualnie wykonywany wątek przechodzi w stan uśpienia (czasowo wstrzymuje wykonywanie) na określony czas. Ale sen rzuca wyjątek InterruptedException Tak więc musimy sobie z tym poradzić, używając try / catch w ten sposób.

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

Aktualizowanie interfejsu użytkownika z wątku w tle

Często używa się wątku w tle do wykonywania operacji sieciowych lub długotrwałych zadań, a następnie w razie potrzeby aktualizuje interfejs użytkownika o wyniki.

Jest to problem, ponieważ tylko główny wątek może aktualizować interfejs użytkownika.

Rozwiązaniem jest użycie metody runOnUiThread() , ponieważ pozwala ona zainicjować wykonanie kodu w wątku interfejsu użytkownika z wątku w tle.

W tym prostym przykładzie Wątek jest uruchamiany po utworzeniu działania, działa do momentu losowego wygenerowania magicznej liczby 42 , a następnie używa metody runOnUiThread() do aktualizacji interfejsu użytkownika po spełnieniu tego warunku.

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
Licencjonowany na podstawie CC BY-SA 3.0
Nie związany z Stack Overflow