связывается с соответствующим ей разметкой public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); ... } • После чего доступ к каждому View по id View view = findViewById(R.id.main_simple_view); Button button = (Button) findViewById(R.id.main_simple_button); • Атрибут android:id при объявлении View в xml <Button android:id="@+id/main_simple_button" .../>
во взаимодействии с пользователем • Когда нам нужно перейти к другому моменту - мы запускаем другую Activity • Например, редактирование фотографии (1), выбор фотографии из списка (2), просмотр информации о программе (3)
элемент различных компонентов Android приложений • Для запуска другой Activity мы посылаем в систему намерение с описанием того, что нам нужно • Возможен явный или неявный запуск Activity, а также запуск с целью получения результата • Неявный запуск позволяет использовать Activity из разных приложений в рамках одной задачи
• action - общее описание действия • data - основные данные для обработки • category - дополнительная информация о action • type - MIME type поля data • component - явный получатель intent • extras - дополнительные данные • http://d.android.com/reference/android/content/Intent.html
Activity: ... Intent intent = new Intent(this, OtherActivity.class); int value = 42; intent.putExtra(“key”, value); startActivity(intent); ... ... Intent intent = getIntent(); int value = intent.getIntExtra(“key”); // value = 42 ...
при типичных сценариях пользовательского взаимодействия! • Для этого стоит посмотреть доклад «Inside the Android Application Framework» с конференции Google I/O 2008, http://youtu.be/TkPiXRNee7A • Также в докладе рассматриваются другие «тонкие», но важные моменты (например, межпроцессное взаимодействие внутри Android)
(точнее процессы) ранжируются в соответствии c важностью для пользователя • При нехватке ресурсов наименее важному приложению будет дана возможность сохранить состояние, после чего оно будет уничтожено • При необходимости уничтоженное приложение будет повторно пересоздано, и ему будет дана возможность восстановить свое состояние
конфигурации • При этом пересоздается только Activity! • Примеры: смена ориентации устройства, системной локали, режима работы устройства и некоторые другие ситуации • Пересоздание Activity в том или ином случае изменения конфигурации можно запретить при объявлении в манифесте
пользователем • Далее приоритет имеют процессы, выполняющие фоновые операции через Service • Наиболее низкий приоритет имеют пустые процессы • Если ваше приложение невидимо для пользователя и не имеет запущенного Service - оно в зоне риска
содержащихся в нем Activity • Если пользователь вернется к уничтоженной Activity, то она будет пересоздана • Разработчик имеет возможность сохранить/ восстановить состояние Activity за счет перегрузки методов: оnSaveInstanceState/onRestoreInstanceState Save/Restore
методе оnSaveInstanceState • А восстановление — в методе onRestoreInstanceState • Состояние других данных должно быть сохранено в методе onPause в БД, настройки, файл на диске и т.д. • Выполнение асинхронных задач лучше организовать независимо от Activity (Services/AsyncTasks/Loaders)
имеет особую модель многозадачности. Ваше приложение может быть пересоздано при нехватке ресурсов. Хорошо спроектированная Activity является независимым и повторно используемым компонентом для взаимодействия с пользователем. Резюме 31