안드로이드 개발 질문/답변
(글 수 45,052)
예를 들어서 설명하겠습니다.
//A.java
class A{
onCreate(){
test();
}
public native void test();
static{
System.loadLibrary("test");
}
}
//test.c
void test(){
sleep(10); //10초동안 sleep
return ;
}
위와같이 간단한 소스가 있다고 생각합시다.
위의 소스는 정상적으로 작동합니다. 하지만....
test.c소스를 아래와 같이 바꾸어 보면
//test.c(mod)
void test(){
for(i = 0; i < 10000; i++);//10초정도 걸린다 가정
return ;
}
Activiry 생성시 error가 발생합니다.
아래의 소스가 작동하지 않는 이유를 알 수 있을까요?
2011.04.01 10:22:17
답변 감사합니다.
10초동안 일을 시키는 작업이 왜 Activity생성시점에서 error를 발생시킬까요?
플렛폼 입장에서 호출한 함수가 10초동안 정지해 있다가 리턴되는것과 10초동안 일을하다 리턴되는것에
왜 차이를 두고 있는지를 질문한 것입니다.
2011.04.01 11:21:29
indexoutofbound exception입니다.
해결되었습니다.
정확한건 모르겠으나 한번 추측해봅니다.
사실 위의 코드로는 비교가 힘들구요 다를 예로 설명하겠습니다.
실코드는 thread에서 위에서 test() 함수를 수행하고 handler로 test()결과를 TextView로 출력하게 해놓았는데
for(10000번) 이라는 코드가 너무 빨리 끝나버리는게 문제인것 같습니다.(for(500000번) 정도로 하면 안죽습니다.) 즉
test()가 리턴되어 handler로 메시지를 뿌리라고 했는데 이것이 리턴 타이밍이 너무 빨라 TextView에 text가 생기기도 전에
handler를 호출해 갱신하라고해서 이렇게 된것 같습니다. 추측입니다. 참고만 하십시오




10초동안 대기 시키는 거 하고
차이랍니다.