수색…
설명이있는 스레드 예제
응용 프로그램을 실행하는 동안 주 스레드가 먼저 실행됩니다. 이 메인 스레드는 응용 프로그램의 모든 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();
}
}