일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- Android
- androidstudio
- bitmap
- BOJ
- Canvas
- CS
- Database
- DBeaver
- DP
- Ecilpse
- Eclipse
- firebase
- git
- github
- GooglePlayServices
- gradle
- IDE
- IntelliJ
- java
- json
- kotlin
- level2
- linux
- mariadb
- MYSQL
- Paint
- permission
- python
- Sorting
- sourcetree
Archives
will come true
[Android] 내장 메모리, 외장 메모리 / 앱별 저장소, 공용 저장소 본문
728x90
안드로이드 앱 데이터를 저장하는 방법
- 내부 데이터베이스에 저장하기
- 파일에 저장하기
- 내부 메모리에 저장하기
- 외부 메모리에 저장하기
- 앱 저장소에 저장하기
- 공용 저장소에 저장하기
- 공유된 프리퍼런스에 저장하기
- 액티비티 단위로 데이터 저장하기
- 앱 단위로 데이터 저장하기
안드로이드 파일 저장 경로
안드로이드에서 파일 저장소는 내장 메모리와 외장 메모리 공간으로 구분되며 외장 메모리 공간은 다시 앱별 저장소와 공용 저장소로 나뉜다. 내장 메모리는 이러한 구분이 없기 때문에 그 자체로 앱별 저장소이다.
앱별 저장소에는 다른 앱이 접근할 수 없지만 공용 저장소에는 다른 앱도 접근할 수 있다.
- 내장 메모리 : 기기 자체의 메모리 공간
- 앱별 저장소 : 개별 앱을 위한 공간
- 외장 메모리 : SD카드와 같은 외부 저장장치 or 내부 저장소의 파티션
- 앱별 저장소 : 개별 앱을 위한 공간
- 공용 저장소 : 모든 앱을 위한 공간
내장 메모리의 앱별 저장소
/data/user/0/패키지명/files
- 앱이 설치되면 시스템에서 자동으로 할당하는 공간.
- 안드로이드 시스템에서 앱의 패키지명으로 만들어 주는 디렉터리.
- 해당 앱에서만 접근할 수 있으며, 다른 앱에서는 접근할 수 없다.
- 외장 메모리에 비해 용량이 적기 때문에 주로 저용량의 민감한 데이터를 저장한다.
- 경로 : Context.filesDir 프로퍼티 값
외장 메모리의 앱별 저장소
/storage/emulated/0/Android/data/패키지명/files
- 개별 앱에서 만든 파일을 저장하는 공간.
- SD 카드와 같은 외부 저장 장치 또는 내부 저장소의 파티션을 나누어 제공하는 공간을 가리킨다.
- 앱별 저장소는 개별 앱에 할당된 공간으로, 기본적으로 해당 앱에서만 접근 가능하다. 앱별 저장소의 파일을 외부 앱에서 접근하게 하려면 FileProvider로 공개해야 한다.
- Environment.getExternalStorageState() 함수로 외장 메모리 사용 가능 여부를 체크할 수 있다.
- 경로 : Context.getExternalFilesDir(null) 함수 리턴 값
- 매개변수로 디렉터리 타입을 넘기면 해당 타입의 경로를 리턴한다.
- ex) getExternalFilesDir(Environment.DIRECTORY_PICTURES)
- 앱별 저장소는 앱이 삭제되면 파일도 모두 삭제된다.
외장 메모리의 공용 저장소
- 앱에서 만든 파일을 모든 앱이 이용할 수 있게 하고 싶을 때 저장하는 공간.
- ex) 카메라 앱에서 촬영한 사진 파일은 모든 앱에서 이용할 수 있어야 하기에 공용 저장소에 저장한다.
- 공용저장소에 저장하면 파일을 만든 앱을 삭제해도 파일이 삭제되지 않는다.
- 안드로이드 시스템에서 파일 종류에 따라 지정한 폴더
- 사진, 음원, 문서 등 파일의 종류에 따라 저장하는 폴더를 지정해뒀다.
- 파일 경로에 직접 접근하지 않고, 시스템이 제공하는 API를 이용해서 접근한다.
- ex) 안드로이드 폰의 이미지(MediaStore.Images) 파일이 저장되는 공용저장소는 DCIM과 Pictures 디렉터리.
Cursor 객체
- Cursor 객체가 사용되는 경우
- contentResolver.query() 함수를 사용해 공용저장소에 질의문을 날리면 Cursor 객체가 반환된다.
- SQLiteDatabase 객체의 rawQuery(), query() 함수를 사용해 내부 데이터베이스에 질의문을 날리면 Cursor 객체가 반환된다.
- 위 경우에서 알 수 있듯이 Cursor 객체는 질의문(쿼리) 실행 결과, 테이블에서 조회된 행 집합을 가리키는 포인터이다.
- Cursor객체의 count 속성이 2라면, 쿼리 조건에 부합하는 데이터(raw)가 2건 나온 것이다.
- moveToFirst(), moveToNext() 등 함수로 선택 행을 이동할 수 있다. 보통 while(coursor.moveToNext()) { ... } 와 같이 조회된 모든 행에 차례대로 접근해서 각 행의 컬럼 값을 가져온다.
728x90
'Android' 카테고리의 다른 글
[Android] Firebase 구글 인증 구현 시 R.string.default_web_client_id 오류 해결 (4) | 2022.03.03 |
---|---|
[Android] Firebase gradle sync failed 오류 해결, 안드로이드 오프라인 모드로 사용하기 (0) | 2022.03.03 |
[Android/Kotlin] 안드로이드 주소록 앱(Contacts)에서 연락처 상세 정보 가져오기, cursor의 count가 0일 때 or moveToFirst() 실행 안될 때 문제 해결 (0) | 2022.01.27 |
[Android] "Waiting For Debugger" 오류 해결, AVD 재부팅 방법 (0) | 2022.01.27 |
[Android] 안드로이드 URL, URI 정의 (0) | 2022.01.26 |
Comments