갑자기 가물가물한데요..
메인쓰레드가 아닌 다른 별도의 쓰레드에서 UI조작에 간섭하면 ANR이 발생하는걸로 알고 있습니다.
그래서 UI에 관련된 작업을 하려면 handler.post(new Runnable... 로 감싸주고 해야하는걸로 기억하는데요.
아래의 코드를 보시져.
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
btn = (Button)findViewById(R.id.button1);
progress = new ProgressDialog(this);
progress.setTitle("");
progress.setMessage("로딩중...");
progress.show();
Thread testThread = new Thread(testRunnable);
testThread.start();
btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
}
});
}
private Runnable testRunnable = new Runnable() {
@Override
public void run() {
// TODO Auto-generated method stub
for(int i=0; i<10; i++) {
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
progress.dismiss();
}
};
코드를 보시면 프로그래쓰바를 show하는건 메인쓰레드에서 해서 문제가 없죠.
그런데 보시면 testRunnable은 메인쓰레드가 아닌 UI조작을 해서는 안되는 메인쓰레드와는 다른 별도의 쓰레드인데
progress.dissmiss(); 가 먹힙니다.
ANR이 걸리지 않구요.
좀 혼란스럽네요.
속시원히 말씀 좀 부탁드립니다.