데이터 저장 유형
대용량및 일반 데이터
설정 상태 데이터
빈번히 변경되는 데이터 파일
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에서 호출은 피하도록 한다.
DB와 Cursor
• Sqlite에select query를 하는 경우에 Cursor를 반환. 그리고 사용하
고 난 뒤에는 cursor도 db도 close를 해야 합니다.
• 일반적인 경우에는 close에 문제가 되지 않습니다. 그러나 쿼리를 하
고 지속적으로 화면에서 쓰이는 Cursor는 정리 시점이 모호합니다.
• 예) 댓글 목록을 리스트로 보여주는 경우, 리스트를 아예 닫지 않는
이상 cursor는 지속 사용이 되고, db도 open되어 있어야 합니다.
• 이를 프로그램적으로 제어하기 힘들어서 제공되는 것이 바로
managedQuery입니다.
– 안드로이드 3.0 (허니컴) 부터는 CursorLoader를 권장.
– 액티비티가 해제될 때 Cursor 객체의 리소스도 자동 해제됩니다.