2. 데이터 저장 유형
대용량 및 일반 데이터
설정 상태 데이터
빈번히 변경되는 데이터 파일
Preference
SQLite 데이터베이스
영속성 있는 데이터들
3. 파일 위치에 따라서
리눅스 기반 파일
App 범위
SD 카드 속 파일
파일 시스템
접근에 대한 보안 레벨이 다릅니다.
4. 시스템 파일 접근
• 안드로이드 파일 시스템은 Linux 시스템.
사용되는 라이브러리는 java 라이브러리.
• App 마다 접근 가능 공간 한정
– 위치: /data/data/패키지명/files 하단
– 해당 위치 하단 no – depth. 이름으로만 구분
• 접근자는 Context 수준에서 제공
– public abstract FileInputStream openFileInput (String name)
• Name에 “/”가 포함되면 에러 처리.
– public abstract FileOutputStream openFileOutput (String name,
int mode)
• Mode는 접근도에 따라서
MODE_APPEND, MODE_PRIVATE, MODE_WORLD_READABLE, MODE_WORLD_WRITEABLE
5. 일반적인 파일 처리 과정
App에서 사용되는 파일들로서
Package에 포함 배포되는
res 폴더 하단 raw 폴더 안에
있는 파일에 대한 처리
6. 다른 App에서 접근
• 다른 앱에서 접근을 허용하게 하기 위해서는 권한 정의.
• 다른 앱에서 접근하기 위해서는 파일 소유 Context를 경
유해서 들어와야 합니다.
– Context otherContext = createPackageContext(“exam.andexam”,
Context.CONTEXT_IGNORE_SECURITY);
FileInputStream fis =otherContext.openFileInput(“test.txt”);
7. SD 카드 속 파일 접근
• SD 카드는 공용 저장소.
• 안드로이드는 SD 카드에 대해서
보안 관리 하지 않음.
• Java에서 일반 파일 다루듯.
• 주의할 점은 경로를 hard
coding이 아닌 아래 방법 통해
서 취할 것.
– Environment.getExternalStorageDirectory()
8. Preference 사용하기
• App이 설치되어서 삭제되기 전까지 꾸준히 관리되어야
할 데이터들을 위한 기능
• Preference를 통해 관리되는 정보는 xml 파일 형태로 저
장
– 입력/출력 형태는 Map (key/value) 형태.
– 파일이라 동시성 고려.
Transaction 처리 = commit, editor
기본값.
꼬옥 활용!
9. 조직화된 데이터 = SQLite
• SQLite = 내장형 소규모 데이터베이스
– 안드로이드 내에 내장해서 제공.
• SQLiteOpenHelper = DB를 생성/오픈 담당
– abstract class
– SQLiteOpenHelper를 상속해서
onCreate, onUpgrade, onOpen을 구현.
– getReadableDatabase, getWritableDatabase 호출 될 때
적절히 DB 생성 / 초기화 / 갱신을 맡아서 수행
• 위 두 함수는 return에 시간이 소요된다. 그렇기 때문에, 가능한
Main Thread에서 호출은 피하도록 한다.
15. DB와 Cursor
• Sqlite에 select query를 하는 경우에 Cursor를 반환. 그리고 사용하
고 난 뒤에는 cursor도 db도 close를 해야 합니다.
• 일반적인 경우에는 close에 문제가 되지 않습니다. 그러나 쿼리를 하
고 지속적으로 화면에서 쓰이는 Cursor는 정리 시점이 모호합니다.
• 예) 댓글 목록을 리스트로 보여주는 경우, 리스트를 아예 닫지 않는
이상 cursor는 지속 사용이 되고, db도 open되어 있어야 합니다.
• 이를 프로그램적으로 제어하기 힘들어서 제공되는 것이 바로
managedQuery입니다.
– 안드로이드 3.0 (허니컴) 부터는 CursorLoader를 권장.
– 액티비티가 해제될 때 Cursor 객체의 리소스도 자동 해제됩니다.