안드로이드 개발 질문/답변
(글 수 45,052)
안드로이드 관련하여 초짜라서 이것 저것 찾아보다가 궁금한 것이 있어서 질문해봅니다.
Content provider를 통해 Query를 하기 위해서 사용할 수 있는 방법이 2가지가 있는 것으로 알고 있습니다.
1. managedQuery()를 통해서
2. ContentResolver.query()를 통해서
둘다 사용되는 argument도 동일하고, return 되는 형식도 cursor object로 동일하던데,
질문.>>
managedQuery()를 사용하는 경우는 Activity life cycle에 맞추어 해당 cursor object도 관리를 해주기 위해서
startManagingCursor(), stopManagingCursor()을 반드시 사용해야 하는 것인지요?
사용하지 않는다면 어떠한 일이 발생할 수 있는것인지요? (developer site에서 글을 읽어봤지만, 명쾌하게 이해가 되질 않습니다.)
두 가지 query 방법중에서 주로 사용되는 방법은 어떤것이 있는지요? (생각에는 ContentResolver.query()일 듯하지만. 모르는 뭔가가 더 있을 것 같습니다. )
또한 Query시에 projection을 통하여 원하는 column값만 return하도록 할 수 있던데,
이렇게 사용하는 경우와 null로 모든 column을 모두 가져오는 경우 대비 장점은 무엇인지요?
-cursor 객체를 위해 사용되어지는 메모리 사용량이 적다. 딱 떠오르는 것은 이것밖에 없어서
고수님들에게 질문을 올려봅니다.
수고하세요.
Content provider를 통해 Query를 하기 위해서 사용할 수 있는 방법이 2가지가 있는 것으로 알고 있습니다.
1. managedQuery()를 통해서
2. ContentResolver.query()를 통해서
둘다 사용되는 argument도 동일하고, return 되는 형식도 cursor object로 동일하던데,
질문.>>
managedQuery()를 사용하는 경우는 Activity life cycle에 맞추어 해당 cursor object도 관리를 해주기 위해서
startManagingCursor(), stopManagingCursor()을 반드시 사용해야 하는 것인지요?
사용하지 않는다면 어떠한 일이 발생할 수 있는것인지요? (developer site에서 글을 읽어봤지만, 명쾌하게 이해가 되질 않습니다.)
두 가지 query 방법중에서 주로 사용되는 방법은 어떤것이 있는지요? (생각에는 ContentResolver.query()일 듯하지만. 모르는 뭔가가 더 있을 것 같습니다. )
또한 Query시에 projection을 통하여 원하는 column값만 return하도록 할 수 있던데,
이렇게 사용하는 경우와 null로 모든 column을 모두 가져오는 경우 대비 장점은 무엇인지요?
-cursor 객체를 위해 사용되어지는 메모리 사용량이 적다. 딱 떠오르는 것은 이것밖에 없어서
고수님들에게 질문을 올려봅니다.
수고하세요.
2010.01.23 02:02:40
managedQuery() = ContentResolver.query() + startManagingCursor() 입니다.
한번 쿼리를 한 이후로 액티비티가 사용되는 동안 계속 쓰이는 커서는 managedQuery를 쓰면되고, 한번 쿼리한후 데이터를 보고 더이상 쓸필요가 없는 경우는 바로 그냥 query를 하고 close() 해버리면 됩니다.
프로젝션의 경우 성능의 차가 있을수 있다가 맞습니다.
2010.01.23 09:27:59
projection으로 원하는 컬럼만 가져올 때는 메모리의 사용량을 줄일 수도 있지만 조회하는 속도를 향상 시킬 수 있습니다.
간단한 예로 엑셀파일에서 10개의 셀에 있는 데이터 중 1셀씩 복사 한다고 할 때 5개의 셀을 복사하여 다른 파일에 붙이는게 빠를 까요? 10개의 셀을 복사하여 붙이는게 빠를까요?
원본에는 10개의 셀이 있지만 복사 본에는 5개의 셀만 있으면된다면 그만큼 복사(조회)하는 시간도 단축되고 파일의 크기(cursor이 사용한 메모리)도 작겠죠.. ^^
만약 모든 컬럼을 가져와야 한다고 해도 *(말씀하신 null)보다는 모든 컬럼을 적어주는게 속도면에서 좋습니다.. 왜냐구요?? 어떤 컬럼을 가져와야 할지 안다면 매번 hasNext(실제로는 이런걸 쓰는지는 모르지만)를 할 필요가 없으니깐요 ^^
간단한 예로 엑셀파일에서 10개의 셀에 있는 데이터 중 1셀씩 복사 한다고 할 때 5개의 셀을 복사하여 다른 파일에 붙이는게 빠를 까요? 10개의 셀을 복사하여 붙이는게 빠를까요?
원본에는 10개의 셀이 있지만 복사 본에는 5개의 셀만 있으면된다면 그만큼 복사(조회)하는 시간도 단축되고 파일의 크기(cursor이 사용한 메모리)도 작겠죠.. ^^
만약 모든 컬럼을 가져와야 한다고 해도 *(말씀하신 null)보다는 모든 컬럼을 적어주는게 속도면에서 좋습니다.. 왜냐구요?? 어떤 컬럼을 가져와야 할지 안다면 매번 hasNext(실제로는 이런걸 쓰는지는 모르지만)를 할 필요가 없으니깐요 ^^