본문 바로가기

안드로이드 개발

안드로이드 Cursor 사용시 Finalizing a Cursor that has not been deactivated or closed. 문제 해결.

안드로이드 앱을 만들면서 앱자체가 죽어버리지는 않는데, 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();로 닫아주기만 하면 된다.

일단 해당 에러로 어플이 죽지 않는다면 자칫 넘어가기 쉬운 일이지만 차후에 메모리 릭이라던가 하는 부분으로 귀찮을 수

있는 부분이니 잘 꼭 잡고 넘어가야겠다.