Android. Собеседование #6. Файловая система

Автор:

1. Как устроена память в Android?

Внутренняя память телефона представляет собой единое физическое пространство, которое программно разбито на две части. Также возможно установить в смартфон карту памяти, которая будет определяться как внешнее хранилище. Участки памяти:
– Internal Storage (Внутреннее хранилище)
Internal Storage всегда доступно для использования. Файлы, сохраненные здесь, доступны только вашему приложению. Когда пользователь удаляет приложение, система удаляет все файлы вашего приложения из внутренней памяти (файл базы данных, файлы SharedPreferences и др.)

– ExternalStorage (Внешнее хранилище)
External Storage не всегда доступно для использования, так как пользователь может смонтировать телефон в качестве USB хранилища при подключении к ПК или извлечь карту памяти из устройства, поэтому перед обращением к ней, необходимо обязательно проверять ее на доступность. Доступ к файлам, сохраненным здесь, открыт, к ним можно обратиться из любого места в системе. Когда пользователь удаляет приложение, система удаляет файлы приложения из External Storage, только если они сохранены по пути, который возвращает метод getExternalFilesDir(), в остальных случаях файлы приложения не удаляются.

Различные модели смартфонов могут иметь разный путь к одни и тем же директориям. Поэтому категорически запрещено хардкодить пути в приложении, для доступа к тем или иным директориям, необходимо использовать только методы, которые предоставляются в Android SDK.

2. Какие разрешения необходимы для работы с памятью Android?

Приложение может работать с Internal Storage без каких-либо разрешений, доступ к нему предоставляется по умолчанию. Для чтения данных с External Storage необходимо запросить разрешение android.permission.READ_EXTERNAL_STORAGE. Для записи данных необходимо разрешение android.permission.WRITE_EXTERNAL_STORAGE, при этом запрашивать разрешение для чтения данных уже не нужно т.к. оно будет предоставлено автоматически.

3. Как получить путь к внутреннему хранилищу?

Чтобы получить путь, по которому расположены директории Internal Storage, необходимо воспользоваться методами, которые нам предоставляет класс ContextWrapper, наследник класса Context. Некоторые методы:
– getDataDir()
возвращает путь (/data/user/0/com.app.stackofskills) к директории, в котором хранятся все файлы приложения
– getCacheDir
возвращает путь (/data/user/0/com.app.stackofskills/cache) к директории, в которой хранятся файлы с кэшем приложения, например файл SharedPreferences.

4. Как получить путь к внешнему хранилищу?

В первую очередь, необходимо запросить разрешение. Чтобы получить путь, по которому расположены директории External Storage, необходимо воспользоваться методами, которые нам предоставляет класс ContextWrapper, наследник класса Context. Также можно использовать класс Environment, для получения путей к различным директориям, таким как Downloads, Pictures, DCIM. Некоторые методы:
– getExternalCacheDir()
возвращает путь (/storage/emulated/0/Android/data/com.app.stackofskills/cache) к директории приложения находящейся на External Storage, в которой хранится кэш приложения.
– getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS)
возвращает путь (/storage/emulated/0/Download) к директории находящейся на External Storage, в которой хранятся загруженные файлы.

5. Какие основные директории в Android вы знаете?

– boot
Содержит информацию, необходимую для загрузки смартфона. При отсутствии или повреждении данного каталога, загрузка будет не возможна.
system
Содержит файлы операционной системы, пользовательского интерфейса Android.
– sys
Содержит данные необходимые для корректной работы ядра системы.
– misc
Содержит различные настройки системы, в основном в формате вкл/выкл.
– data
Содержит пользовательские данные, смски, контакты, пароли от wi-fi сетей, настройки для установленных приложений.
recovery
Содержит данные, для возможности запустить смартфон в режиме восстановления, отображая только консоль.

 

Ваш адрес email не будет опубликован. Обязательные поля помечены *