image.setImageResource(R.drawable.icon);
for(int i=0;i<20000;i++){
setContentView(image);
}
다음과 같이이 할경우 이만번이 그려질 줄알았는데 최종적으로 셋팅만 이만번 되고 그려주는것은
한번만 되서 이만번을 계속 그려주기 위해서는 어떤 작업을 해야 되는지 궁금합니다.
serfaceview 클래스를 이용하여 그려보아도 다시그려지지 않고 최종적으로 한번만 그려집니다.
사용소스는 아래와 같습니다. 색이아닌 이미지를 불러와서 그리고 싶은데; SurfaceView를 사용하면 이미지는 어떻게 불러오는건가요?
private static class SmpleView extends SurfaceView implements SurfaceHolder.Callback {
public SmpleView(Context context) {
super(context);
// TODO Auto-generated constructor stub
SurfaceHolder holder = getHolder();
holder.addCallback(this);
}
@Override
public void surfaceChanged(SurfaceHolder arg0, int arg1, int arg2,
int arg3) {
// TODO Auto-generated method stub
}
@Override
public void surfaceCreated(SurfaceHolder holder) {
// TODO Auto-generated method stub
Canvas canvas = holder.lockCanvas();
try {
canvas.drawColor(Color.WHITE);
} finally {
if (canvas != null)
holder.unlockCanvasAndPost(canvas);
}
}
@Override
public void surfaceDestroyed(SurfaceHolder arg0) {
// TODO Auto-generated method stub
}
}
}
RunOnUiThread
invalidate or postInvalidate
post(runable)
AsyncTask(UserTask) 를 이용하시면 됩니다.
글 내용상 UI 쓰레드가 아닌 Extra 쓰레드에서 코드가 실행되는 것으로 보이는데.
화면 갱신은 UI 쓰레드에서만 이루어지니
위의 메소드를 이용해서 화면을 갱신하면 됩니다.
저의 짧은 지식이 도움이 되었으면 합니다. ^^
간단하게 Thread-per-Message 패턴이라고 생각하시면 되요.
안드로이드는 UI 쓰레드가 화면을 제어합니다.
non-UI 쓰레드에서 만번이든 10만번이든 호출해도 마지막 한번정도(?) 만 갱신될것으로 예상되네요.
Handler를 이용해서 다른 쓰레드에서 처리되는 것을 UI 쓰레드로 넘겨줘서 처리할 수 있게 만들어주면 됩니다.
Handler 사용법은 회색님께서 SDK 개발정보에 자세히 설명해 주셨으니 참고하시면 됩니다.
첫술에 배부를수 없으니 천천히 해보시면 아시게 될거예요^^