Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Dive Into Android. Activity

Dive Into Android. Activity

Alex Korovyansky

September 29, 2013
Tweet

More Decks by Alex Korovyansky

Other Decks in Programming

Transcript

  1. 5 Activity • Базовый компонент Android-приложений • Отвечает за взаимодействие

    с пользователем • Обычно соответствует одному экрану приложения • Набор Activity образует Task
  2. 6 Объявление Activity • В коде: public class SimpleActivity extends

    Activity { ... } • В манифесте приложения: <application android:icon="@drawable/icon" android:label="@string/app_name"> <activity android:name=".SimpleActivity"> ... </activity> </application>
  3. 7 Activity и UI • В момент создания Activity связывается

    с соответствующим ей UI 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" .../>
  4. 8 Основные методы Activity • onCreate - создание, инициализация •

    onPause/onStop - пауза/остановка, сохранение важной информации • finish - завершение Activity • setContentView, findViewById - связь с интерфейсом и получение конкретного View • startActivity, startActivityForResult - запуск другой Activity • onActivityResult - обработка результата работы другой Activity
  5. 10 Связь между Activities • Каждая Activity соответствует определенному моменту

    во взаимодействии с пользователем • Когда нам нужно перейти к другому моменту - мы запускаем другую Activity • Например, редактирование фотографии (1), выбор фотографии из списка (2), просмотр информации о программе (3)
  6. 11 Intent - cвязующее звено • Intent (намерение) - связующий

    элемент различных компонентов Android приложений • Для запуска другой Activity мы посылаем в систему намерение с описанием того, что нам нужно • Возможен явный или неявный запуск Activity, а также запуск с целью получения результата • Неявный запуск позволяет использовать Activity из разных приложений в рамках одной задачи
  7. 12 Intent за 30 секунд • Intent включает в себя:

    • action - общее описание действия • data - основные данные для обработки • category - дополнительная информация о action • type - MIME type поля data • component - явный получатель intent • extras - дополнительные данные • http://d.android.com/reference/android/content/Intent.html
  8. 13 Явно или неявно? 1. Пример явного запуска Activity: 2.

    Пример неявного запуска Activity: ... Intent intent = new Intent(this, OtherSimpleActivity.class); startActivity(intent); ... ... String url = "http://www.google.com"; Intent intent = new Intent(Intent.ACTION_VIEW); i.setData(Uri.parse(url)); startActivity(intent); ...
  9. 14 Нужен ли результат? 1. Нет 2. Да ... startActivity(intent)

    private static final int REQUEST_CODE = 1; ... startActivityForResult(intent, REQUEST_CODE); ... @Override protected void onActivityResult(int requestCode, int resultCode, Intent resultIntent) { super.onActivityResult(requestCode, resultCode, resultIntent); switch (requestCode) { case REQUEST_CODE: if (resultCode == RESULT_OK) { //do something with resultIntent ... } } }
  10. 15 Обработка результата ... setResult(intent); • Установка результата в вызываемой

    Activity: • Обработка результата в вызывающей Activity: private static final int REQUEST_CODE = 1; ... startActivityForResult(intent, REQUEST_CODE); ... @Override protected void onActivityResult(int requestCode, int resultCode, Intent resultIntent) { super.onActivityResult(requestCode, resultCode, resultIntent); switch (requestCode) { case REQUEST_CODE: if (resultCode == RESULT_OK) { //do something with resultIntent ... } } }
  11. 20 Жизненный цикл Activity 1. Время жизни (onCreate - onDestroy)

    2. Время видимости (onStart - onStop) 3. Время пользователя (onResume - onPause) 4. Время невидимости (1) = (2) + (4)
  12. 21 Многозадачность • В Android поддерживается многозадачность • Специфика мобильной

    платформы • Отличия многозадачности в iOS и Android http://www.extremetech.com/computing/ 112013-how-multitasking-works-on- android-and-ios
  13. 22 Борьба за выживание • Ресурсы мобильного устройства ограничены •

    Приложения (точнее процессы) ранжируются в соответствии c важностью для пользователя • При нехватке ресурсов наименее важному приложению будет дана возможность сохранить состояние, после чего оно будет уничтожено • При необходимости уничтоженное приложение будет повторно пересоздано, и ему будет дана возможность восстановить свое состояние
  14. 23 Ранжирование • Наиболее высокий приоритет имеют процессы, взаимодействующие с

    пользователем • Далее приоритет имеют процессы, выполняющие фоновые операции через Service • Наиболее низкий приоритет имеют пустые процессы • Если ваше приложение невидимо для пользователя и не имеет запущенного Service - оно в зоне риска
  15. 24 Уничтожение и возрождение • Система может принять решение об

    уничтожении процесса и содержащихся в нем Activity • Если пользователь вернется к уничтоженной Activity, то она будет пересоздана • Разработчик имеет возможность сохранить/ восстановить состояние Activity за счет перегрузки методов: оnSaveInstanceState/onRestoreInstanceState • На этом пути есть некоторые «подводные камни» - однако, все приходит с опытом...
  16. 25 Изменение конфигурации • Отдельным случаем пересоздания Activity является изменение

    конфигурации • При этом пересоздается только Activity! • Примеры: смена ориентации устройства, системной локали, режима работы устройства и некоторые другие ситуации • Пересоздание Activity в том или ином случае изменения конфигурации можно запретить при объявлении в манифесте
  17. 26 Хороший подход • Cохранение состояния UI должно производиться в

    методе оnSaveInstanceState • А восстановление - в методе onRestoreInstanceState • Состояние других данных должно быть сохранено в методе onPause в БД, настройки, файл на диске и т.д. • Выполнение асинхронных задач лучше организовать независимо от Activity (Service/Loaders)
  18. 27 Основные use-cases • Важно понимать, что происходит с Activity

    при типичных сценариях пользовательского взаимодействия! • Для этого стоит посмотреть доклад «Inside the Android Application Framework» с конференции Google I/O 2008, http://youtu.be/TkPiXRNee7A • Также в докладе рассматриваются другие «тонкие», но важные моменты (например, межпроцессное взаимодействие внутри Android)
  19. Вы узнали о базовом компоненте Android приложений - Activity. Android

    имеет особую модель многозадачности. Ваше приложение может быть пересоздано при нехватке ресурсов. Хорошо спроектированная Activity является независимым и повторно используемым компонентом для взаимодействия с пользователем. Резюме 29