안녕하세요?
setText를 사용해서 한 번 클릭시 지정된 문자열이 한글자씩 출력되는 기능을 구현하고 있습니다.
메인 UI를 변경해야 하므로 핸들러를 같이 사용해서, substring으로 한 글자씩 잘라서
sendEmptyMessageDelayed를 통해 100ms당 한 글자씩 출력하는 기능입니다.
그런데 이렇게 하고보니 대략 300ms이하부터는 더 빠르게 출력되게 값을 설정해도
똑같이 느릿느릿하게 출력됩니다. 이게 제가 어떤 코드를 누락시켜서 그런건지, 아니면
메모리나 다른 부분에 부하가 커서 이정도로밖에 출력되지 않는건지 모르겠습니다.
원래 기능의 목적은 50ms에 한 글자 정도의 속도로 출력해주는게 목적이었습니다.
public class Play extends Thread{
final SetHandler setHandler = new SetHandler();
TextView writeTextView;
Map<Integer,Line> map = new HashMap<Integer,Line>();
int playnum = 0;
Play(Map map, TextView writeTextView,int i){
this.writeTextView = writeTextView;
this.map = map;
playnum = i;
}
@Override
public void run() {
Line playline = map.get(playnum);
setHandler.keyNum(playnum,playline,writeTextView);
playnum++;
}
Play 클래스입니다.
사용할 핸들러를 미리 선언해놓고, 텍스트뷰와 Line클래스를 넣는 핸들러의 Keynum메소드를 작동시킵니다.
Line은 제가 문자열 외 여러 정보를 넣어두기 위해 따로 선언한 클래스입니다.
map은 HashMap인데, Integer를 키로 해서 Line을 저장해두는 맵입니다.
public class SetHandler extends Handler {
private int num = 0;
private Line line;
TextView write;
private int position = 0;
public void keyNum(int i,Line line,TextView write){
num = i;
this.line = line;
this.write = write;
Message message = obtainMessage();
sendMessage(message);
}
public void handleMessage(Message msg){
super.handleMessage(msg);
write.setText(line.getText().substring(0,++position));
if(position != line.getText().length()){
sendEmptyMessageDelayed(0,300);
}
}
}
SetHandler 클래스입니다.
sendEmptyMessageDelayed를 통해 300ms당 한번씩 메세지를 보내줍니다.
그리고 write.setText()로 한글자씩 잘라서 출력합니다.