마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

cursor의 close 메서드에 대해서..

0 추천
Cursor cursor = getURI();  
   int end = cursor.getCount(); 
   name = new String[end];
   phone = new String[end]; 
   
   String[] bbStr = cursor.getColumnNames();
   for(int i=0; i<bbStr.length;i++)
    
    Log.e(tag, "ColumnName " + i + " : " + cursor.getColumnName(i));
   
   if(cursor.moveToFirst()) {  
    do {
     if(!cursor.getString(2).startsWith("01")) 
      continue;      

     name[count] = cursor.getString(1); 
     name[count] += "\n"; 
     phone[count] = cursor.getString(2);
     name[count] += phone[count];
     count++;
    } while(cursor.moveToNext());
    
    new_name = new String[count];
    for(int i=0; i<count; i++) new_name[i] = name[i];
   }

   //cursor.close();

안녕하세요 :)

초보 개발자다 보니 질문을 벌써 3번째 하게되었네요.

답변해주시는 분들 항상 감사 드립니다.

전에 한번 질문을 올렸는데 답을 찾지 못해서 다시 질문합니다!

 

저번에 이 코드를 실행을 하면 잘 돌아가긴 하는데,

잠금화면에서 실행되있는 어플로 들어가거나..

다른 인텐트로 넘어갔다가 뒤로가기를 눌러서 돌아가려고하면

죽어버리는 현상이 있었다고 질문을 올렸었습니다.

 

그때 끙끙대면서 찾아봤는데 cursor.close()를 주석처리하니까 그런 현상이 사라지더라구요.

아무리 생각해도 이유를 모르겠어서 그냥 넘어가려다가..

너무 찝찝해서 질문올립니다.

 

cursor를 close했을때 저런 현상이 나타나는 이유가 궁금합니다.

또, cursor를 close안해도 되는지 좀 걱정이 되네요..

close해주고 다른 부분에서 잘못된점을 찾아야 할까요?

 

알고 계신분들 답변해주시면 감사하겠습니다 :)

도꼬비 (900 포인트) 님이 2013년 9월 26일 질문

1개의 답변

0 추천
커서는 close 해주는게 메모리 릭 방지를 위해서 맞고요

죽어버리는 현상은 로그를 확인해봐야 합니다.

일단 위 코드에서 커서 널체크 하지 않는것도 위험해 보이네요.
whitesnow (8,920 포인트) 님이 2013년 9월 26일 답변
...