SlideShare uma empresa Scribd logo
1 de 24
Baixar para ler offline
Services

Лекция №5
Service






extends Service
Длительные операции
Нет интерфейса
Любой может запустить(если нет настроек приватности)
Два вида:
 Started Service
 BoundService

 Выполняется в main Thread(!)
 Средство формирования архитектуры приложения

2
Service или поток?
 Service
 Может выполняться, даже когда пользователь не
взаимодействует с приложением

 Thread
 Выполняется, только когда приложение запущено

3
Life cycle методы
 onStartCommand()
 Вызовется, если вызвать startService()
 После выполнения этого метода сервис считается запущенным
 Если он реализован – мы должны сами останавливать сервис(stopSelf() или
stopService())

 onBind()
 Возвращает интерфейс(Ibinder) через который компонент, вызвавший
onBind(), будет общаться с сервисом
 Всегда должен быть реализован
 Если не нужен bind – возвращать null

 onCreate()
 Вызывается один раз самым первым
 Используется для одноразовой инициализации чего-нибудь

 onDestroy()
4
Как долго выполняется сервис?
 StartedService
 Пока сам не остановит себя с помощью stopSelf()
 Пока кто-нибудь не вызовет stopService()

 BoundService
 Пока хоть кто-нибудь привязан с сервису он существует,
иначе система уничтожает его

 Система убьет сервис только при условии нехватки
памяти
 Система запустит сервис, как только появятся
ресурсы
5
Service in Manifest

6
StartedService







Запускается другим компонентом
По умолчанию в main thread(!)
Независимый life cycle
onStartCommand()
Получает Intent
extends Service
 Базовый класс
 main thread(!)

 extends IntentService





Подкласс Service
Worker thread
Выполняет запросы в порядке очереди
onHandleIntent()
7
Intent Service
 Популярен
 Выполняет задачи по одной в отдельном потоке

 Останавливает сервис, когда все запросы
выполнены
 Все что нужно – имплементировать onHandleIntent()
и конструктор

8
IntentService

9
onStartCommand() return
 Что системе делать с сервисом, если ей пришлось
убить его(если это произошло после окончания
onStartCommand())
 START_NOT_STICKY
 Не пересоздавать сервис

 START_STICKY
 Пересоздать и вызвать onStartCommand()
 Не получит последний Intent(будет null)

 START_REDELIVER_INTENT
 Тоже самое, но передает последний intent
10
Bound Service










Длительное соединение
Взаимодействие с другими приложениями
onBind()
Ibinder
Интерфейс взаимодействия
Если нет ни одного клиента – сервис уничтожается
ServiceConnection
bindService() не ждет коннекта
onBind() вызвается только один раз
11
Создание Bound Service
 3 способа определения Ibinder интерфейса
 extends Binder
 Приватный сервис
 onBind() возвращает наследника, через которого можно вызвать публичные методы
сервиса
 Основной вариант

 Messenger
 Сервис взаимодействует с несколькими процессами
 Thread safe

 AIDL





Android Interface Definition Language
Несколько процессов
Повсеместно используется в системе
Concurrency
12
Extends Binder
 Метод getService(), возвращающий this
 Метод getService(), возвращающий любой другой
класс, содержащий реализацию интерфейса
 Просто является имплементацией интерфейса

 Почему это работает, только если сервис в том же
приложении, что и его клиенты?

13
Example

14
Example

15
BoundService life cycle

16
Life cycle callbacks

17
Foreground Service
 Хоть и без интерфейса, но пользователь
взаимодействует с ним(проигрывание музыки)

 Должен создать нотификацию(в status bar)
 Теоретически система никогда не убьет его

 startForeground(id, notification)
 Id != 0
 stopForeground(boolean)

18
Notifications
 Design guidelines
 Обычный

 Расширенный
 Builder

 Оповещения от
сервисов и ресиверов

19
Notifications

1)Title
2)Large icon
3)Content
4)Info
5)Small icon
6)Time
7)Time
20
Notifications
1)Title
2)Large icon

3)Content
4)Info

5)Small icon
6)Time
7)Details

21
Create notification
 Notification.Builder
 NotificationCompat.Builder (support library)

 Notify()
 Обязательно:
 Small icon
 Title
 Text

 PendingIntent

22
Create Notification

23
Broadcast receiver
 Системные оповещения
 Взаимодействие с другими приложениями

 onReceive()
 Security

 Объявление в манифесте
 extends BroadcastReceiver
 Можно регистрировать в runtime
 http://developer.android.com/reference/android/co
ntent/Intent.html
24

Mais conteúdo relacionado

Destaque

Управление продуктом осень 2013 лекция 3
Управление продуктом осень 2013 лекция 3Управление продуктом осень 2013 лекция 3
Управление продуктом осень 2013 лекция 3Technopark
 
рычаги в технике, быту и природе
рычаги в технике, быту и природерычаги в технике, быту и природе
рычаги в технике, быту и природеОльга Евдокимова
 
Управление продуктом осень 2013 лекция 5
Управление продуктом осень 2013 лекция 5Управление продуктом осень 2013 лекция 5
Управление продуктом осень 2013 лекция 5Technopark
 
Смысл и значение этики
Смысл и значение этикиСмысл и значение этики
Смысл и значение этикиTanya67
 
Lecturesnikitsin
LecturesnikitsinLecturesnikitsin
Lecturesnikitsinanikitsin
 
облачные сервисы
облачные сервисыоблачные сервисы
облачные сервисыenjoythesilen
 
Проектирование интерфейсов весна 2014 занятие 7
Проектирование интерфейсов весна 2014 занятие 7Проектирование интерфейсов весна 2014 занятие 7
Проектирование интерфейсов весна 2014 занятие 7Technopark
 
Actualités sur Google et le SEO - Février 2015
Actualités sur Google et le SEO - Février 2015Actualités sur Google et le SEO - Février 2015
Actualités sur Google et le SEO - Février 2015Philippe YONNET
 
Облачные вычисления: архитектура, распределение ответственности и защита инфо...
Облачные вычисления: архитектура, распределение ответственности и защита инфо...Облачные вычисления: архитектура, распределение ответственности и защита инфо...
Облачные вычисления: архитектура, распределение ответственности и защита инфо...ActiveCloud
 
Регулярные выражения C++
Регулярные выражения C++Регулярные выражения C++
Регулярные выражения C++Dmitry Bulgakov
 
Алгоритмы и структуры данных осень 2013 лекция 5
Алгоритмы и структуры данных осень 2013 лекция 5Алгоритмы и структуры данных осень 2013 лекция 5
Алгоритмы и структуры данных осень 2013 лекция 5Technopark
 
Java осень 2014 занятие 8
Java осень 2014 занятие 8Java осень 2014 занятие 8
Java осень 2014 занятие 8Technopark
 
Java весна 2014 лекция 1
Java весна 2014 лекция 1Java весна 2014 лекция 1
Java весна 2014 лекция 1Technopark
 
Java осень 2013 лекция 3
Java осень 2013 лекция 3Java осень 2013 лекция 3
Java осень 2013 лекция 3Technopark
 
Управление продуктом весна 2014 лекция 4
Управление продуктом весна 2014 лекция 4Управление продуктом весна 2014 лекция 4
Управление продуктом весна 2014 лекция 4Technopark
 
ganapati-atharvashirsha-critique-in-marathi
ganapati-atharvashirsha-critique-in-marathiganapati-atharvashirsha-critique-in-marathi
ganapati-atharvashirsha-critique-in-marathimarathivaachak
 
Облачные вычисления на основе VMware
Облачные вычисления на основе VMwareОблачные вычисления на основе VMware
Облачные вычисления на основе VMwareSkillFactory
 
Алгоритмы и структуры данных весна 2014 лекция 2
Алгоритмы и структуры данных весна 2014 лекция 2Алгоритмы и структуры данных весна 2014 лекция 2
Алгоритмы и структуры данных весна 2014 лекция 2Technopark
 
Java осень 2013 лекция 8
Java осень 2013 лекция 8Java осень 2013 лекция 8
Java осень 2013 лекция 8Technopark
 

Destaque (20)

Управление продуктом осень 2013 лекция 3
Управление продуктом осень 2013 лекция 3Управление продуктом осень 2013 лекция 3
Управление продуктом осень 2013 лекция 3
 
рычаги в технике, быту и природе
рычаги в технике, быту и природерычаги в технике, быту и природе
рычаги в технике, быту и природе
 
Управление продуктом осень 2013 лекция 5
Управление продуктом осень 2013 лекция 5Управление продуктом осень 2013 лекция 5
Управление продуктом осень 2013 лекция 5
 
Смысл и значение этики
Смысл и значение этикиСмысл и значение этики
Смысл и значение этики
 
Lecturesnikitsin
LecturesnikitsinLecturesnikitsin
Lecturesnikitsin
 
облачные сервисы
облачные сервисыоблачные сервисы
облачные сервисы
 
Om bhadram karnebhih shrinuyama devah
Om bhadram karnebhih shrinuyama devahOm bhadram karnebhih shrinuyama devah
Om bhadram karnebhih shrinuyama devah
 
Проектирование интерфейсов весна 2014 занятие 7
Проектирование интерфейсов весна 2014 занятие 7Проектирование интерфейсов весна 2014 занятие 7
Проектирование интерфейсов весна 2014 занятие 7
 
Actualités sur Google et le SEO - Février 2015
Actualités sur Google et le SEO - Février 2015Actualités sur Google et le SEO - Février 2015
Actualités sur Google et le SEO - Février 2015
 
Облачные вычисления: архитектура, распределение ответственности и защита инфо...
Облачные вычисления: архитектура, распределение ответственности и защита инфо...Облачные вычисления: архитектура, распределение ответственности и защита инфо...
Облачные вычисления: архитектура, распределение ответственности и защита инфо...
 
Регулярные выражения C++
Регулярные выражения C++Регулярные выражения C++
Регулярные выражения C++
 
Алгоритмы и структуры данных осень 2013 лекция 5
Алгоритмы и структуры данных осень 2013 лекция 5Алгоритмы и структуры данных осень 2013 лекция 5
Алгоритмы и структуры данных осень 2013 лекция 5
 
Java осень 2014 занятие 8
Java осень 2014 занятие 8Java осень 2014 занятие 8
Java осень 2014 занятие 8
 
Java весна 2014 лекция 1
Java весна 2014 лекция 1Java весна 2014 лекция 1
Java весна 2014 лекция 1
 
Java осень 2013 лекция 3
Java осень 2013 лекция 3Java осень 2013 лекция 3
Java осень 2013 лекция 3
 
Управление продуктом весна 2014 лекция 4
Управление продуктом весна 2014 лекция 4Управление продуктом весна 2014 лекция 4
Управление продуктом весна 2014 лекция 4
 
ganapati-atharvashirsha-critique-in-marathi
ganapati-atharvashirsha-critique-in-marathiganapati-atharvashirsha-critique-in-marathi
ganapati-atharvashirsha-critique-in-marathi
 
Облачные вычисления на основе VMware
Облачные вычисления на основе VMwareОблачные вычисления на основе VMware
Облачные вычисления на основе VMware
 
Алгоритмы и структуры данных весна 2014 лекция 2
Алгоритмы и структуры данных весна 2014 лекция 2Алгоритмы и структуры данных весна 2014 лекция 2
Алгоритмы и структуры данных весна 2014 лекция 2
 
Java осень 2013 лекция 8
Java осень 2013 лекция 8Java осень 2013 лекция 8
Java осень 2013 лекция 8
 

Mais de Technopark

Лекция 11. Вычислительная модель Pregel
Лекция 11. Вычислительная модель PregelЛекция 11. Вычислительная модель Pregel
Лекция 11. Вычислительная модель PregelTechnopark
 
Лекция 14. Hadoop в Поиске Mail.Ru
Лекция 14. Hadoop в Поиске Mail.RuЛекция 14. Hadoop в Поиске Mail.Ru
Лекция 14. Hadoop в Поиске Mail.RuTechnopark
 
Лекция 13. YARN
Лекция 13. YARNЛекция 13. YARN
Лекция 13. YARNTechnopark
 
Лекция 12. Spark
Лекция 12. SparkЛекция 12. Spark
Лекция 12. SparkTechnopark
 
Лекция 10. Apache Mahout
Лекция 10. Apache MahoutЛекция 10. Apache Mahout
Лекция 10. Apache MahoutTechnopark
 
Лекция 9. ZooKeeper
Лекция 9. ZooKeeperЛекция 9. ZooKeeper
Лекция 9. ZooKeeperTechnopark
 
Лекция 7. Введение в Pig и Hive
Лекция 7. Введение в Pig и HiveЛекция 7. Введение в Pig и Hive
Лекция 7. Введение в Pig и HiveTechnopark
 
Лекция 6. MapReduce в Hadoop (графы)
Лекция 6. MapReduce в Hadoop (графы)Лекция 6. MapReduce в Hadoop (графы)
Лекция 6. MapReduce в Hadoop (графы)Technopark
 
Лекция 5. MapReduce в Hadoop (алгоритмы)
Лекция 5. MapReduce в Hadoop (алгоритмы)Лекция 5. MapReduce в Hadoop (алгоритмы)
Лекция 5. MapReduce в Hadoop (алгоритмы)Technopark
 
Лекция 4. MapReduce в Hadoop (введение)
Лекция 4. MapReduce в Hadoop (введение)Лекция 4. MapReduce в Hadoop (введение)
Лекция 4. MapReduce в Hadoop (введение)Technopark
 
Лекция 3. Распределённая файловая система HDFS
Лекция 3. Распределённая файловая система HDFSЛекция 3. Распределённая файловая система HDFS
Лекция 3. Распределённая файловая система HDFSTechnopark
 
Лекция 2. Основы Hadoop
Лекция 2. Основы HadoopЛекция 2. Основы Hadoop
Лекция 2. Основы HadoopTechnopark
 
Лекция 1. Введение в Big Data и MapReduce
Лекция 1. Введение в Big Data и MapReduceЛекция 1. Введение в Big Data и MapReduce
Лекция 1. Введение в Big Data и MapReduceTechnopark
 
СУБД 2013 Лекция №10 "Нереляционное решение в области баз данных — NoSQL"
СУБД 2013 Лекция №10 "Нереляционное решение в области баз данных — NoSQL"СУБД 2013 Лекция №10 "Нереляционное решение в области баз данных — NoSQL"
СУБД 2013 Лекция №10 "Нереляционное решение в области баз данных — NoSQL"Technopark
 
СУБД 2013 Лекция №10 "Нереляционное решение в области баз данных — NoSQL" Час...
СУБД 2013 Лекция №10 "Нереляционное решение в области баз данных — NoSQL" Час...СУБД 2013 Лекция №10 "Нереляционное решение в области баз данных — NoSQL" Час...
СУБД 2013 Лекция №10 "Нереляционное решение в области баз данных — NoSQL" Час...Technopark
 
СУБД 2013 Лекция №9 "Безопасность баз данных"
СУБД 2013 Лекция №9 "Безопасность баз данных"СУБД 2013 Лекция №9 "Безопасность баз данных"
СУБД 2013 Лекция №9 "Безопасность баз данных"Technopark
 
СУБД 2013 Лекция №8 "Конфигурирование базы данных"
СУБД 2013 Лекция №8 "Конфигурирование базы данных"СУБД 2013 Лекция №8 "Конфигурирование базы данных"
СУБД 2013 Лекция №8 "Конфигурирование базы данных"Technopark
 
СУБД 2013 Лекция №7 "Оптимизация запросов и индексирование"
СУБД 2013 Лекция №7 "Оптимизация запросов и индексирование"СУБД 2013 Лекция №7 "Оптимизация запросов и индексирование"
СУБД 2013 Лекция №7 "Оптимизация запросов и индексирование"Technopark
 
СУБД 2013 Лекция №5 "Определение узких мест"
СУБД 2013 Лекция №5 "Определение узких мест"СУБД 2013 Лекция №5 "Определение узких мест"
СУБД 2013 Лекция №5 "Определение узких мест"Technopark
 
СУБД 2013 Лекция №6 "Профилирование запросов. Сложноструктурированные SQL-зап...
СУБД 2013 Лекция №6 "Профилирование запросов. Сложноструктурированные SQL-зап...СУБД 2013 Лекция №6 "Профилирование запросов. Сложноструктурированные SQL-зап...
СУБД 2013 Лекция №6 "Профилирование запросов. Сложноструктурированные SQL-зап...Technopark
 

Mais de Technopark (20)

Лекция 11. Вычислительная модель Pregel
Лекция 11. Вычислительная модель PregelЛекция 11. Вычислительная модель Pregel
Лекция 11. Вычислительная модель Pregel
 
Лекция 14. Hadoop в Поиске Mail.Ru
Лекция 14. Hadoop в Поиске Mail.RuЛекция 14. Hadoop в Поиске Mail.Ru
Лекция 14. Hadoop в Поиске Mail.Ru
 
Лекция 13. YARN
Лекция 13. YARNЛекция 13. YARN
Лекция 13. YARN
 
Лекция 12. Spark
Лекция 12. SparkЛекция 12. Spark
Лекция 12. Spark
 
Лекция 10. Apache Mahout
Лекция 10. Apache MahoutЛекция 10. Apache Mahout
Лекция 10. Apache Mahout
 
Лекция 9. ZooKeeper
Лекция 9. ZooKeeperЛекция 9. ZooKeeper
Лекция 9. ZooKeeper
 
Лекция 7. Введение в Pig и Hive
Лекция 7. Введение в Pig и HiveЛекция 7. Введение в Pig и Hive
Лекция 7. Введение в Pig и Hive
 
Лекция 6. MapReduce в Hadoop (графы)
Лекция 6. MapReduce в Hadoop (графы)Лекция 6. MapReduce в Hadoop (графы)
Лекция 6. MapReduce в Hadoop (графы)
 
Лекция 5. MapReduce в Hadoop (алгоритмы)
Лекция 5. MapReduce в Hadoop (алгоритмы)Лекция 5. MapReduce в Hadoop (алгоритмы)
Лекция 5. MapReduce в Hadoop (алгоритмы)
 
Лекция 4. MapReduce в Hadoop (введение)
Лекция 4. MapReduce в Hadoop (введение)Лекция 4. MapReduce в Hadoop (введение)
Лекция 4. MapReduce в Hadoop (введение)
 
Лекция 3. Распределённая файловая система HDFS
Лекция 3. Распределённая файловая система HDFSЛекция 3. Распределённая файловая система HDFS
Лекция 3. Распределённая файловая система HDFS
 
Лекция 2. Основы Hadoop
Лекция 2. Основы HadoopЛекция 2. Основы Hadoop
Лекция 2. Основы Hadoop
 
Лекция 1. Введение в Big Data и MapReduce
Лекция 1. Введение в Big Data и MapReduceЛекция 1. Введение в Big Data и MapReduce
Лекция 1. Введение в Big Data и MapReduce
 
СУБД 2013 Лекция №10 "Нереляционное решение в области баз данных — NoSQL"
СУБД 2013 Лекция №10 "Нереляционное решение в области баз данных — NoSQL"СУБД 2013 Лекция №10 "Нереляционное решение в области баз данных — NoSQL"
СУБД 2013 Лекция №10 "Нереляционное решение в области баз данных — NoSQL"
 
СУБД 2013 Лекция №10 "Нереляционное решение в области баз данных — NoSQL" Час...
СУБД 2013 Лекция №10 "Нереляционное решение в области баз данных — NoSQL" Час...СУБД 2013 Лекция №10 "Нереляционное решение в области баз данных — NoSQL" Час...
СУБД 2013 Лекция №10 "Нереляционное решение в области баз данных — NoSQL" Час...
 
СУБД 2013 Лекция №9 "Безопасность баз данных"
СУБД 2013 Лекция №9 "Безопасность баз данных"СУБД 2013 Лекция №9 "Безопасность баз данных"
СУБД 2013 Лекция №9 "Безопасность баз данных"
 
СУБД 2013 Лекция №8 "Конфигурирование базы данных"
СУБД 2013 Лекция №8 "Конфигурирование базы данных"СУБД 2013 Лекция №8 "Конфигурирование базы данных"
СУБД 2013 Лекция №8 "Конфигурирование базы данных"
 
СУБД 2013 Лекция №7 "Оптимизация запросов и индексирование"
СУБД 2013 Лекция №7 "Оптимизация запросов и индексирование"СУБД 2013 Лекция №7 "Оптимизация запросов и индексирование"
СУБД 2013 Лекция №7 "Оптимизация запросов и индексирование"
 
СУБД 2013 Лекция №5 "Определение узких мест"
СУБД 2013 Лекция №5 "Определение узких мест"СУБД 2013 Лекция №5 "Определение узких мест"
СУБД 2013 Лекция №5 "Определение узких мест"
 
СУБД 2013 Лекция №6 "Профилирование запросов. Сложноструктурированные SQL-зап...
СУБД 2013 Лекция №6 "Профилирование запросов. Сложноструктурированные SQL-зап...СУБД 2013 Лекция №6 "Профилирование запросов. Сложноструктурированные SQL-зап...
СУБД 2013 Лекция №6 "Профилирование запросов. Сложноструктурированные SQL-зап...
 

Android осень 2013 лекция 5

  • 2. Service      extends Service Длительные операции Нет интерфейса Любой может запустить(если нет настроек приватности) Два вида:  Started Service  BoundService  Выполняется в main Thread(!)  Средство формирования архитектуры приложения 2
  • 3. Service или поток?  Service  Может выполняться, даже когда пользователь не взаимодействует с приложением  Thread  Выполняется, только когда приложение запущено 3
  • 4. Life cycle методы  onStartCommand()  Вызовется, если вызвать startService()  После выполнения этого метода сервис считается запущенным  Если он реализован – мы должны сами останавливать сервис(stopSelf() или stopService())  onBind()  Возвращает интерфейс(Ibinder) через который компонент, вызвавший onBind(), будет общаться с сервисом  Всегда должен быть реализован  Если не нужен bind – возвращать null  onCreate()  Вызывается один раз самым первым  Используется для одноразовой инициализации чего-нибудь  onDestroy() 4
  • 5. Как долго выполняется сервис?  StartedService  Пока сам не остановит себя с помощью stopSelf()  Пока кто-нибудь не вызовет stopService()  BoundService  Пока хоть кто-нибудь привязан с сервису он существует, иначе система уничтожает его  Система убьет сервис только при условии нехватки памяти  Система запустит сервис, как только появятся ресурсы 5
  • 7. StartedService       Запускается другим компонентом По умолчанию в main thread(!) Независимый life cycle onStartCommand() Получает Intent extends Service  Базовый класс  main thread(!)  extends IntentService     Подкласс Service Worker thread Выполняет запросы в порядке очереди onHandleIntent() 7
  • 8. Intent Service  Популярен  Выполняет задачи по одной в отдельном потоке  Останавливает сервис, когда все запросы выполнены  Все что нужно – имплементировать onHandleIntent() и конструктор 8
  • 10. onStartCommand() return  Что системе делать с сервисом, если ей пришлось убить его(если это произошло после окончания onStartCommand())  START_NOT_STICKY  Не пересоздавать сервис  START_STICKY  Пересоздать и вызвать onStartCommand()  Не получит последний Intent(будет null)  START_REDELIVER_INTENT  Тоже самое, но передает последний intent 10
  • 11. Bound Service          Длительное соединение Взаимодействие с другими приложениями onBind() Ibinder Интерфейс взаимодействия Если нет ни одного клиента – сервис уничтожается ServiceConnection bindService() не ждет коннекта onBind() вызвается только один раз 11
  • 12. Создание Bound Service  3 способа определения Ibinder интерфейса  extends Binder  Приватный сервис  onBind() возвращает наследника, через которого можно вызвать публичные методы сервиса  Основной вариант  Messenger  Сервис взаимодействует с несколькими процессами  Thread safe  AIDL     Android Interface Definition Language Несколько процессов Повсеместно используется в системе Concurrency 12
  • 13. Extends Binder  Метод getService(), возвращающий this  Метод getService(), возвращающий любой другой класс, содержащий реализацию интерфейса  Просто является имплементацией интерфейса  Почему это работает, только если сервис в том же приложении, что и его клиенты? 13
  • 18. Foreground Service  Хоть и без интерфейса, но пользователь взаимодействует с ним(проигрывание музыки)  Должен создать нотификацию(в status bar)  Теоретически система никогда не убьет его  startForeground(id, notification)  Id != 0  stopForeground(boolean) 18
  • 19. Notifications  Design guidelines  Обычный  Расширенный  Builder  Оповещения от сервисов и ресиверов 19
  • 22. Create notification  Notification.Builder  NotificationCompat.Builder (support library)  Notify()  Обязательно:  Small icon  Title  Text  PendingIntent 22
  • 24. Broadcast receiver  Системные оповещения  Взаимодействие с другими приложениями  onReceive()  Security  Объявление в манифесте  extends BroadcastReceiver  Можно регистрировать в runtime  http://developer.android.com/reference/android/co ntent/Intent.html 24