[Android] Lazy Loading
Lazy Loading 처리
Thread로 UI갱신을 하려고 하면 예외(※1)가 발생한다.
그러므로 Thread에서 UI의 갱신을 할수 있는 Handler를 호출.
Thread에서 약간의 딜레이(sleep)을 두지 않으면, 메인의 UI가 반응하지 않는 현상이 있었다.
※1 ViewRoot$CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch its views
//UI갱신을 위한 핸들러
final Handler handler = new Handler() {
public void handleMessage(Message msg) {
Bundle bundel = msg.getData();
int i = bundel.getInt("i");
// Lazy Loading 처리 구문을 여기에.
// UI는 Class.this로 직접 지시.
}
};
//쓰레드 처리를 위한 클래스
class LazyLoad extends Thread{
Handler mHandler; //UI접근을 위한 핸들러
int length; // 반복수
public LazyLoad(int length, Handler handler){
this.mHandler = handler;
this.length = length;
}
public void run(){
for(int i=0; i<this.length;i++){
Bundle bundle = new Bundle();
bundle.putInt("i", i);
Message msg = mHandler.obtainMessage();
msg.setData(bundle);
mHandler.sendMessage(msg);
this.sleep(100);
}
}
}
추가. 스레드에서 for문을 돌리는 것이 무식한 짓이었던 듯. 각 로딩당 스레드를 생성하는 것이 나을 듯하다. 퍼포먼스의 저하가 우려된다면, 스레드 작업관리 큐를 만들어 처리하는 것이 좋을 듯.