안드로이드 앱을 만들면서 앱자체가 죽어버리지는 않는데, LogCat 상에서 붉은색 글씨로
Finalizing a Cursor that has not been deactivated or closed. 이라는 메시지가 나왔다.
검색을 해보았더니 메모리 릭이 발생하는 부분이라서 어찌되었든 수정이 필요한 부분이었다.
처음에는 단순히
try {
} catch(SQLException e){} 정도로만 처리해주면 될 줄 알았는데, try 문 안에 넣어줘도 결과는 마찬가지였다.
소스를 전체적으로 다시 보면서
커서 사용시 닫아줘야 하는데 실제로 안닫아 주고 그냥 넘어간 부분들이 많았다.
예를 들면
Cursor mCursor = null;
mCursor = mDb.query(true, DATABASE_TABLE, new String[]{"test"},"test" + "=" + 'hi', null, null, null, null, null);
mCursor.close();
이런식으로 그냥 Cursor 사용이 끝났으면 .close();로 닫아주기만 하면 된다.
일단 해당 에러로 어플이 죽지 않는다면 자칫 넘어가기 쉬운 일이지만 차후에 메모리 릭이라던가 하는 부분으로 귀찮을 수
있는 부분이니 잘 꼭 잡고 넘어가야겠다.
Finalizing a Cursor that has not been deactivated or closed. 이라는 메시지가 나왔다.
검색을 해보았더니 메모리 릭이 발생하는 부분이라서 어찌되었든 수정이 필요한 부분이었다.
처음에는 단순히
try {
} catch(SQLException e){} 정도로만 처리해주면 될 줄 알았는데, try 문 안에 넣어줘도 결과는 마찬가지였다.
소스를 전체적으로 다시 보면서
커서 사용시 닫아줘야 하는데 실제로 안닫아 주고 그냥 넘어간 부분들이 많았다.
예를 들면
Cursor mCursor = null;
mCursor = mDb.query(true, DATABASE_TABLE, new String[]{"test"},"test" + "=" + 'hi', null, null, null, null, null);
mCursor.close();
이런식으로 그냥 Cursor 사용이 끝났으면 .close();로 닫아주기만 하면 된다.
일단 해당 에러로 어플이 죽지 않는다면 자칫 넘어가기 쉬운 일이지만 차후에 메모리 릭이라던가 하는 부분으로 귀찮을 수
있는 부분이니 잘 꼭 잡고 넘어가야겠다.
'안드로이드 개발' 카테고리의 다른 글
안드로이드 디스플레이 크기 값 얻어오기 (0) | 2011.03.09 |
---|---|
안드로이드에서 현재 최상위 Activity 값 알아보기 (1) | 2011.02.17 |
안드로이드 모델명 및 브랜드 이름 등 값 가져오기 (1) | 2011.02.15 |
안드로이드에서 Device의 고유값 알아보기 (0) | 2011.02.15 |
이미지 기본 상태와 Press 상태에 따라서 다른 효과 보여주도록 xml 파일 만들기 (0) | 2011.02.08 |