моб разраб. Лабораторные работы с 1 по 21. Лабораторная работа Использование значений строк и цветов
Скачать 5.49 Mb.
|
Сохранение состояния и настроек приложенияПоскольку жизненный цикл приложений и Активностей в Android может прерваться в любой момент, для повышения привлекательности и удобства пользовательского интерфейса желательно иметь возможность сохранять (и восстанавливать!) состояния Активностей не только при выходе из активного состояния, но и между запусками. Android предлагает для этого следующие механизмы: : простой способ сохранения состояния UI и настроек приложения, использующий пары ключ/значение для хранения примитивных типов данных и обеспечения доступа к ним по имени. Сохранение состояния приложения: Для Активностей существуют обработчики событий, позволяющие сохранять и восстанавливать текущее состояние UI, когда выходит и возвращается в активный режим. Для сохранения состояния используется объект класса Bundle, который передается методам onSaveInstanceState (для сохранения состояния), onCreateи onRestoreInstanceState (для восстановления). Для доступа к данным в этом случае также используются пары ключ/значение. Обработчики событий из суперклассов берут на себя основную работу по сохранению и восстановлению вида UI, фокуса полей и т. д. Прямая работа с файлами. Если не подходят описанные выше варианты, приложение может напрямую читать и писать данные из файла. Для этого можно использовать как стандартные классы и методы Java, обеспечивающие ввод/вывод, так и методы openFileInput и openFileOutput, предоставленные Android, для упрощения чтения и записи потоков, относящихся к локальным файлам. Общие Настройки (Shared Preferences) Класс SharedPreferences предлагает методы для хранения и получения данных, записываемых в файлы, доступные по умолчанию только конкретному приложению. Такой способ хранения обеспечивает сохранность этих данных не только в течении жизненного цикла приложения, но и между запусками и даже перезагрузкой ОС. Для сохранения данных в файле используется транзакционный механизм: вначале требуется получить объект класса SharedPreferences.Editor для конкретного файла настроек, после чего с помощью методов вида putТип этого объекта установить нужные значения. Запись значений производится методом commit. Примеры: Сохранение данных: private static final String PREFS = "PREFS"; static final String KEY_STATION = "selectedStation"; private SharedPreferences prefs; private static final String NOTHING_SELECTED = "Ничего не выбрано"; private String selectedStation; prefs = getSharedPreferences(PREFS, MODE_PRIVATE); Editor editor = prefs.edit(); editor.putString(KEY_STATION, selectedStation); editor.commit(); Получение данных: prefs = getSharedPreferences(PREFS, MODE_PRIVATE); selectedStation = prefs.getString(KEY_STATION, NOTHING_SELECTED); tv.setText(selectedStation); Модифицируйте методы onCreate и onActivityResult проекта MetroPicker для сохранения выбранной станции метро между запусками приложения. Проверьте работоспособность приложения. Модифицируйте проект ControlsSample так, чтобы состояние управляющих элементов сохранялось и восстанавливалось между запусками приложения. Проверьте работоспособность приложения. Работа с файлами Методы openFileInput и openFileOutput дают возможность работать только с файлами, находящимися в «персональном» каталоге приложения. Как следствие, указание разделителей («/») в имени файла приведет к выбросу исключения. По умолчанию файлы, открытые на запись, перезаписываются. Если это не то, что требуется, при открытии установите режим MODE_APPEND. Пример работы с файлами: String FILE_NAME = "app_data"; // Открытие выходного файлового потока FileOutputStream fos = openFileOutput(FILE_NAME, Context.MODE_PRIVATE); // Открытие входного файлового потока FileInputStream fis = openFileInput(FILE_NAME); String FILE_NAME = "app_data"; Через объект Context в приложении также возможен доступ к двум полезным методам: fileList возвращает список файлов приложения deleteFile удаляет файл из каталога приложения Использование статических файлов как ресурсов Если приложению необходимо иметь доступ к информации, которую неудобно хранить, например, в СУБД, эти данные можно использовать в виде «сырых» ресурсов, записав их в файлы в каталоге res/raw. Яркий пример подобных данных – словари. Статические файлы, как следует из названия, доступны только для чтения, для их открытия используется метод openRawResource: Resources res = getResources(); InputStream file = res.openRawResource(R.raw.filename); |