2. Предыдущая лекция
Что такое фрагмент?
Зачем они нужны?
Как можно создать?
Что такое транзакция(в
терминах фрагментов)?
Когда нельзя вызывать
commit()?
Чем RelativeLayout лучше
чем LinearLayout?
Что такое
StateListDrawable?
Как так получилось что xml
тоже drawable?
2
4. Потоки в Android
Длительные операции в UI
Thread останавливают всю
отрисовку и игнорируют
пользователя
CalledFromWrongThreadEx
ception
Loopers & Handlers
Activity.runOnUiThread()
AsyncTasks
IntentService
4
5. Looper
Присоединяет
MessageQueue к потоку
Управляется очередью
Handler отправляет в
очередь сообщения
ThreadLocal
java.lang.RuntimeExcepti
on: Can't create handler
inside thread that has
not called
Looper.prepare()
5
10. Handler
Постит Runnables в
Looper
Привязан к потоку
Сам может быть
обработчиком
сообщения, которое
послал
Отложенное по
времени выполение
кода
Выполнение кода не в
своем потоке
10
12. AsyncTask<Params, Progress, Result>
Убирает весь поточный зоопарк
Основная задача – выполнить задачу в background
и запостить результат в UI thread
Без намека на Thread, Looper, Handler и проч.
Три метода:
doInBackground(Params… p){return Result
onProgressUpdate(Progress… pr)
onPostExecute(Result)
new AsyncTaskExample().execute(Params)
12
13. Важные замечания по AsyncTask
Нельзя запустить один и тот же AsyncTask больше
одного раза
Вызов cancel не остановит выполнение
doInBackground – вместо onPostExecute будет
вызван onCancelled
Все AsyncTasks в приложении запускаются в одном
потоке подряд(с Honeycomb), если нужно другое
поведение – executeOnExecutor()
get() – блокирует поток и возвращает Result
13
14. Processes
I уровень – foreground process
Сервис, который привязан к activity, с которой взаимодействуют
Сервис, запущенный с помощью startForeground()
Сервис в котором выполняется один из life cycle callbacks
Activity, с которой взаимодействует пользователь
Ресивер, в котором выполняется onReceive()
II Уровень – visible process
Activity после onPause()
Сервис привязанный к такой активити
III Уровень – service process
IV Уровень – Background process
Сервис, запущенный с помощью startService() и не относящийся к предыдущим уровням
Процесс с activity, которая не видна пользователю
V Уровень – Empty process
Для кеша
14
15. Processes
Android ставит насколько можно высокий приоритет
Практическое применение: т.к. Процесс с сервисом
приоритетнее чем с background activity, то если требуется
выполнить операцию надо создать сервис, а не просто
отдельный поток
15