2012년 7월 6일 금요일

android debugging 1

블로거 통계 조작으로 아직도 기분이 매우 나쁘지만.

파일 첨부도 안되는 이곳을 블로그로 하기로 결정 했기에 어쩔 수 없다.

-----------------------------------------------------------------------------------

프로그램을 만들다 보면 cursor를 빈번하게 사용하게 된다.

inputstream이나 output stream 또한 그렇다.

런타임 때 문제가 되는 것이 close를 안해서 인데

이게 생각보다 쉽지가 않다.

보통 까먹는다.

이게 가장 큰 이유고.


try catch문에 들어 갔을 때에도 문제가 된다.

try 구문 실행중에 Exception을 만나면 그 하위는 실행이 안되고

catch를 타버리는데 try 안쪽에 close가 있다면 닫히지 않는 것이다.



if 구문도 문제가 된다.

if(특정 상황) 에서 { 어쩌구 저쩌구 c.close(); } 해놓고
else
에는
close 하지 않으면 else 탈 때 close가 되지 않는다.



API 중에 Exception이 가능한 애들은 다 try catch를 해줘야 한다. 가령
int abc = Integer.parseInt(abc);
의 경우
NumberFormatException
이 날 수 있는데 try catch가 없으면 해당 메소드는 비정상 종료 된다.
그런 때 커서나 입출력 스트림같은게 오픈되어 있으면 close 하지 못해서 심각한
오류가 될 수도 있다.

그리고 이런 구문의 경우

try {
writer.startTag("", "Method");
writer.attribute("", "ID",
c.getString(c.getColumnIndex(TasksTbl._ID)));
writer.attribute("", "Cmd", "New");
sendData(writer, c);
writer.endTag("", "Method");
} catch (Exception e) {
if (c != null) c.close();
}

catch가 Exception이 아니라 IllegalXXX 같은 특정 Exception인 경우
다른 오류가 발생했을 때 커서를 못 닫으니
Exception 캣치는 꼭 마련해야 한다.




간과하기 쉬운 것들이지만

나중에 개고생 하게 만든다.

이상 개방위 - 개고생 방지 위원회.

댓글 없음:

댓글 쓰기

국정원의 댓글 공작을 지탄합니다.

UPBIT is a South Korean company, and people died of suicide cause of coin investment.

 UPBIT is a South Korean company, and people died of suicide cause of coin. The company helps the people who control the market price manipu...