1. Выделение бизнес-
логики в сервис
Дмитрий Викторович Малыханов
DataArt
The Android robot is reproduced or modified from work created and shared by Google and used according to terms described in the
Creative Commons 3.0 Attribution License.
2. Что, где, когда
зачем нужны сервисы
Происхождение видов
какие бывают сервисы
Раз два три четыре пять
начинаем выполнять
Получите и распишитесь
доставка результатов
4. Альтернативы
Просто: Service:
● Thread (pool)
○ Возврат в UI thread
● AsyncTask
○ Последовательно
○ Малое время жизни
● Application
?
○ Засорение кучи
○ Нет IPC
5. Альтернативы
Просто: Service:
● Thread (pool)
○ Возврат в UI thread
● AsyncTask
○ Последовательно
○ Малое время жизни
● Application
?
○ Засорение кучи
○ Нет IPC
6. Альтернативы
Просто: Service:
● Thread (pool)
○ Возврат в UI thread
● AsyncTask
○ Последовательно
○ Малое время жизни
● Application
?
○ Засорение кучи
○ Нет IPC
7. Альтернативы
Просто: Service:
● Thread (pool) ● Thread/Pool/Etc.
○ Возврат в UI thread ○ Гибкое управление
● AsyncTask ● Wake Locks
○ Последовательно ○ Гарантия CPU
○ Малое время жизни ● Lifetime
● Application ○ Сам за себя
○ Засорение кучи
○ Нет IPC
8. Альтернативы
Просто: Service:
● Thread (pool) ● Thread/Pool/Etc.
○ Возврат в UI thread ○ Гибкое управление
● AsyncTask ● Wake Locks
○ Последовательно ○ Гарантия CPU
○ Малое время жизни ● Lifetime
● Application ○ Сам за себя
○ Засорение кучи
○ Нет IPC
9. Альтернативы
Просто: Service:
● Thread (pool) ● Thread/Pool/Etc.
○ Возврат в UI thread ○ Гибкое управление
● AsyncTask ● Wake Locks
○ Последовательно ○ Гарантия CPU
○ Малое время жизни ● Lifetime
● Application ○ Сам за себя
○ Засорение кучи
○ Нет IPC
18. Раз два три четыре
пять
начинаем правильно выполнять
19. Что и как делаем?
switch (cmdId) {
case CMD_POLL:
poll(); Расширение
break; функциональности?
case CMD_UPLOAD:
upload();
break;
if ("poll".equals(cmd)) {
poll();
} else if ("upload".equals(cmd)) {
upload();
}
21. Идентификаторы
public static final int CMD_POLL = 10;
public static final int CMD_UPLOAD = 20;
...
Command.class.hashCode()
System.identityHashCode()
22. Доставка команд
switch (commandId) {
case CMD_POLL:
return new PollCommand().execute();
case CMD_UPLOAD:
return new UploadCommand().execute();
...
abstract class Command
implements Parcelable {
public abstract void execute(...);
}
23. Не все равны
Последовательное выполнение команд:
Command.isSerial()
frameworks/base/core/java/android/os/AsyncTask.java:
private static class SerialExecutor
implements Executor {
...
44. Выделение бизнес-
логики в сервис
The Android robot is reproduced or modified from work created and shared by Google and used according to terms described in the
Creative Commons 3.0 Attribution License.