본문 바로가기

나의 플랫폼/안드로이드

[ Android Opengl es 2.0 ] java.lang.IllegalArgumentException

336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.
 Wallpaper를 개발하는 저는.. 항상 문제점이 미리보기 부분 이었습니다.
이번에 문제도 테스트 하다 갑자기 나온 Exception 때문에..
SI 업체이다 보니 해결 못하면 고객사에 보내기가 찝찝해서 이렇게 빈번도가 낮아도 해결을 할려고 발악(?)을 하지요^^;;;


 위와 같은 Exception이 발견 되는 시점은 Opengl es 1.1을 사용한 Wallpaper은 발생 하지 않거나, 빈번도가 극히 희박합니다. 
하지만, Opengl es 2.0에서는 5번의 1번은 발생을 하더라구요.
테스트 방법 : 미리보기를 선택한 후, 재빠르게 취소 버튼을 누르면 발생합니다. 

결국 Wallpaper에 타격은 없지만, Exception이 발생해서 Error가 뜨면 어떻게든 잡아야겠죠?ㅎㅎ
그래서 try catch문으로 잡았습니다.

현재 Wallpaper에서 Opengl es를 사용할 때, 사용하는 라이브러리에 보면
GLThread라는 클래스가 있습니다.

// Opengl Thread의 run함수
@Override

public void run() {

setName("GLThread " + getId());

if (LOG_THREADS) {

Log.i("GLThread", "starting tid=" + getId());

}


try {

guardedRun();

} catch (InterruptedException e) {

// fall thru and exit normally

} catch (IllegalArgumentException e){

// e.printStackTrace();

}catch (RuntimeException e){

// e.printStackTrace();

}finally {

sGLThreadManager.threadExiting(this);

}

}



본래 라이브러리에서는 InterruptedException만 잡았더라구요.
여기에 발생 할 수 있는 Exception을 추가해주면 됩니다.

제가 테스트 해본 결과 IllegalArgumentException 뿐만 아니라, RuntimeException 도 발생을 하더군요.
그래서 이 두 가지를 추가하면, Exception을 발생 하지만, 
Error로써 어플이 종료되는 메세지가 보여지는 것은 막을 수 있습니다.

그럼 오늘도 즐코딩^^