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

Dive Into Android. Activity

Sponsored · SiteGround - Reliable hosting with speed, security, and support you can count on.

Dive Into Android. Activity

Avatar for Alex Korovyansky

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