수색…


설명이있는 스레드 예제

응용 프로그램을 실행하는 동안 주 스레드가 먼저 실행됩니다. 이 메인 스레드는 응용 프로그램의 모든 UI 개념을 처리합니다. 우리가 UI를 필요로하지 않는 작업을 오래 실행하고 싶다면 백그라운드에서 해당 작업을 실행하기 위해 스레드를 사용합니다.

타격을 묘사하는 Thread의 예가 아래와 같습니다 :

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

thread를 실행하기위한 Thread.run() 메소드를 가지는 Thread의 오브젝트를 작성해 thread를 작성할 수 있습니다. 여기에서는 run() 메소드가 start() 메소드에 의해 불려갑니다.

MultiThreading이라고하는 여러 스레드를 독립적으로 실행할 수도 있습니다. 이 스레드는 또한 현재 실행중인 스레드가 지정된 시간 동안 일시적으로 (실행을 일시적으로 중단하는) sleep 기능을 갖습니다. 그러나 sleep은 InterruptedException을 던집니다. 그래서 우리는 try / catch와 같이 이것을 사용하여 처리해야합니다.

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

백그라운드 스레드에서 UI 업데이트

일반적으로 네트워크 작업 또는 장기 실행 작업을 수행하는 백그라운드 스레드를 사용하고 필요한 경우 UI를 결과로 업데이트합니다.

메인 스레드 만 UI를 업데이트 할 수 있기 때문에 문제가 발생합니다.

해결 방법은 runOnUiThread() 메서드를 사용하는 것입니다. runOnUiThread() 메서드를 사용하면 백그라운드 스레드에서 UI 스레드에 대한 코드 실행을 시작할 수 있습니다.

이 간단한 예제에서 활동 생성시 스레드가 시작되고 마법 수 42 가 무작위로 생성 될 때까지 실행 된 다음이 조건이 충족되면 runOnUiThread() 메소드를 사용하여 UI를 업데이트합니다.

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
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow