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

Android School 2017 - Lecture 2

Android School 2017 - Lecture 2

Material Design overview. App manifest. Activity and Intent. Building UI with XML. Activity lifecycle and Hollywood principle.

Alex Korovyansky

October 05, 2017
Tweet

More Decks by Alex Korovyansky

Other Decks in Programming

Transcript

  1. 6 Дизайн приложений ++ • Enchant, Simplify, Amaze: Android's Design

    • Structure in Android App Design • Android Design in Actions
  2. 9 Activity • Базовый компонент Android-приложений • Отвечает за взаимодействие

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

    Activity { ... } • В манифесте приложения: <application android:icon="@drawable/icon" android:label="@string/app_name"> <activity android:name=".SimpleActivity"> ... </activity> </application>
  4. 11 Связь с разметкой • Обычно в момент создания Activity

    связывается с соответствующим ей разметкой 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" .../>
  5. 13 Связь между Activities • Каждая Activity соответствует определенному моменту

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

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

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

    Пример неявного запуска Activity: ...
 Intent intent = new Intent(this, OtherActivity.class); startActivity(intent); ... ... String url = "http://www.google.com"; Intent intent = new Intent(Intent.ACTION_VIEW); i.setData(Uri.parse(url)); startActivity(intent);
 ...
  9. 17 Нужен ли результат? 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 ... } } } ...
 setResult(intent);
 finish();

  10. 18 Передача параметров 1. В вызывающей Activity: 2. В вызываемой

    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 ...
  11. 20 Основные методы Activity • onCreate - создание, инициализация •

    onPause/onStop - пауза/остановка, сохранение важной информации • finish - завершение Activity • setContentView, findViewById - связь с интерфейсом и получение конкретного View • startActivity, startActivityForResult - 
 запуск другой Activity • onActivityResult - обработка результата работы другой Activity
  12. 23 Жизненный цикл Activity 1. Время жизни
 (onCreate - onDestroy)

    2. Время видимости
 (onStart - onStop) 3. Время пользователя
 (onResume - onPause) 4. Время невидимости
 (OnStop - OnDestroy)
 

  13. 24 Основные use-cases • Важно понимать, что происходит с Activity

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

    (точнее процессы) ранжируются в соответствии c важностью для пользователя • При нехватке ресурсов наименее важному приложению будет дана возможность сохранить состояние, после чего оно будет уничтожено • При необходимости уничтоженное приложение будет повторно пересоздано, и ему будет дана возможность восстановить свое состояние
  15. 27 Изменение конфигурации • Отдельным случаем пересоздания Activity является изменение

    конфигурации • При этом пересоздается только Activity! • Примеры: смена ориентации устройства, системной локали, режима работы устройства и некоторые другие ситуации • Пересоздание Activity в том или ином случае изменения конфигурации можно запретить при объявлении в манифесте
  16. 28 Ранжирование • Наиболее высокий приоритет имеют процессы, взаимодействующие с

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

    содержащихся в нем Activity • Если пользователь вернется к уничтоженной Activity, то она будет пересоздана • Разработчик имеет возможность сохранить/ восстановить состояние Activity за счет перегрузки методов: оnSaveInstanceState/onRestoreInstanceState
 Save/Restore
  18. 30 Хороший подход • Cохранение состояния UI должно производиться в

    методе оnSaveInstanceState • А восстановление — в методе onRestoreInstanceState • Состояние других данных должно быть сохранено в методе onPause в БД, настройки, файл на диске и т.д. • Выполнение асинхронных задач лучше организовать независимо от Activity (Services/AsyncTasks/Loaders)
  19. Вы узнали о базовом компоненте Android приложений — Activity. Android

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