안녕하세요?
쓰레드와 핸들로의 차이를 알고싶습니다.
어플 을 제작하던중에 중대한 실수코딩을 한것같습니다.
쓰레드를 잘못쓰니 오히려 어플이 느려지내요.
메인에서 다음 페이지로 넘거려고 합니다.
다음페이지는
private void aaaA(){
new Thread(new Runnable() {
public void run() {
runOnUiThread(new Runnable() {
public void run() {
}
});
}
}).start();
}
이 메소드를 resume 으로 사용하고 있는데요.
웹페이지에서 데이터를 받아서 업데이트를 해줘야 하는 작업입니다.
메인에서 버튼을 누루면 바로 다음페이지에 넘어가서 저스레드를 실행해서 내용을 업데이트 할줄 알았습니다.
실정은.. 버튼을 누르자 마자 저 쓰레드가 실행이되고 쓰레드가 완료 되었을때 다음 페이지로 넘어가던군요..
UI 관련된 쓰레드다 되니 그러는가 보다해서
private void aaaA(){
new Thread(new Runnable() {
public void run() {
}
}).start();
}
UI쪽 스레드를 빼고 작업을 해보았습니다..
결과는 같습니다.
메인에서 버튼을 누루면 쓰레드로 데이터를 모두 업데이트 한후에 다음 화면이 나오내요.(1초 정도 걸리는작업이라).
쓰레드 없이 하면 바로 바로 다음 페이지로 넘어가는데 1초정도 시간이 걸립니다.
또한 서버가 느리거나 인터넷 상황이 느리면 더더욱 오래 걸린후에 넘어가고요.
핸들러를 쓰라는 말씀이 많던데..
어떻게 작업을 해주어야 일단 다음페이지에 빠르게 넘어간다음에 쓰레드 작업을 할수 있을가요?
조언 부탁드립니다.




다음페이지(Activity)에서
private final Handler mHandler = new Handler(); 로 핸들러 한개 자동으로 생성하도록 멤버필드 선언하시구요..
onResume 에서
다음의 코드로
mHandler.postDelayed(new Runnable() {
@Override
public void run() {
... 할일...
}
}, 1000);
1000은 1초 후에 작업을 하라는 건데, 일단 다음 페이지가 나오고 UI 쓰레드가 할일 코드를 수행하게 됩니다.
할일 코드 자체를 별도의 Thread에서 수행 할려면, (올려주신 코드 베이스로..)
private void aaaA(){
new Thread(new Runnable() {
public void run() {
... 할일...
runOnUiThread(new Runnable() {
public void run() {
}
});
}
}).start();
}
위와 같이 할일을 Thread 초반부에 해 주시고 UI thread run 함수에서는 완료되었음을 알리는 코드만 있어야 할 것 같네요.