Сборник тестов: 1500 вопросов и ответов на знание Android - Тимур Машнин
Шрифт:
Интервал:
Закладка:
Можно использовать фреймворк HaMeR без манипулирования потоками, обработчиками, сообщениями или Runnable объектами явно.
Вопрос 15
Что из следующего является мотивацией для Android фреймворков параллельных вычислений?
Они увеличивают производительность путем совмещения коммуникации и вычисления на многоядерных платформах.
Они запускают короткие операции в фоновых потоках и длительные операции в потоке пользовательского интерфейса.
Они улучшают переносимость приложений для различных реализаций виртуальных машин Java.
Они защищают разработчиков от утомительных и чреватых ошибками аспектов конструктивных ограничений платформы Android.
Вопрос 16
Какой шаблон применяется к Looper, обеспечивающий, что есть только один Looper для потока?
Template Method
Guarded Suspension
Thread-Specific Storage
Active Object
Вопрос 17
Какой шаблон позволяет классу HandlerThread создать нужные обработчики с помощью переопределения метода onLooperPrepared?
Template Method
Guarded Suspension
Thread-Specific Storage
Active Object
Вопрос 18
Какие из следующих возможностей предоставляет Handler для приложений?
Выполнять Runnable задачи последовательно или в пуле потоков.
Взаимодействовать с Looper для сериализации обработки сообщений в потоке, с которым они связаны.
Отправлять Message объекты и/или публиковать Runnable объекты в Looper в потоке обработчика.
Запускать и отменять асинхронные вычисления, запрашивать чтобы увидеть, если вычисления завершены, и получать результаты вычислений.
Вопрос 19
Что из следующего является ключевыми паттернами, поддерживаемыми Handler?
Command Processor
Active Object
Guarded Suspension
Strategy
Вопрос 20
Какие из следующих возможностей паттерна Command Processor применяются классом Android Handler?
Включает выделение сообщения из глобального пула, устанавливая различные поля сообщения.
Позволяет handleMessage () методу Handler направляться в разные потоки, а не клиенту, который отправил сообщение.
Позволяет Runnable обрабатываться в более позднее время в том же потоке, что и клиент, который разместил Runnable.
Позволяет Runnable обрабатываться в другом потоке, чем клиент, который разместил Runnable.
Вопрос 21
Что из следующего является причиной того, что отправка сообщения в обработчик сложнее, чем размещение Runnable в обработчике?
Handler должен быть расширен и его handleMessage () метод должен быть переопределен для обработки полученных сообщений.
Логика обработчика локализуется в точке, где метод send () вызывается.
Обработчик предоставляет методы, которые позволяют программе реализовать поведение синхронизации.
Обработчик определяет методы, которые позволяют программе использовать очередь сообщений, связанную с Looper потока.
Вопрос 22
Что из следующего является преимуществом фреймворка AsyncTask по сравнению с фреймворком HaMeR?
Пользователи фреймворка AsyncTask должны иметь глубокое понимание закономерностей, которые определяют структуру и взаимодействие между классами, которые фреймворк использует внутри себя.
Фреймворк AsyncTask не требует от разработчиков приложений явно манипулировать потоками, обработчиками, сообщениями или Runnable объектами.
Тесная интеграция классов в фреймворке AsyncTask упрощает их использование за счет снижения «площадь поверхности» API, который фреймворк предоставляет для приложений.
Слабая интеграция классов в фреймворке AsyncTask упрощает их использование за счет снижения «площадь поверхности» API, который фреймворк предоставляет для приложений.
Вопрос 23
Что из следующего является способом, которым фреймворк AsyncTask расширяет шаблон Template Method?
Он откладывает некоторые шаги в своем алгоритме параллельной обработки для подкласса.
Он позволяет подклассам переопределить свои методы.
Он позволяет своим методам работать в разных потоках управления.
Он отделяет интерфейс от реализации, так они могут изменяться независимо.
Вопрос 24
Какие из следующих фреймворков используются внутри фреймворка Android AsyncTask?
Java Executor
Android IntentService
Android HaMeR
Android Activity
Вопрос 25
Что из следующего является поведением по умолчанию AsyncTasks в последних версиях Android?
Пул потоков запускает несколько AsyncTasks одновременно в процессе, чтобы использовать многоядерные чипсеты.
Фреймворк Android HaMeR используется внутри фреймворка AsyncTask для передачи сообщений из фонового потока в поток пользовательского интерфейса.
Единственный фоновый поток в каждом процессе запускает все doInBackground () методы AsyncTasks.
Вопрос 26
Что из следующего являются различными способами параллельной загрузки изображения?
Выполнение AsyncTasks.
Вызов удаленного метода через Binder.
Размещение и обработка Runnable.
Отправка и обработка сообщений.
Вопрос 27
Что из следующего является преимуществом AsyncTask фреймворка по отношению к фреймворку HaMeR?
Он обеспечивает низкие накладные расходы для синхронизации, переключения контекста и перемещения данных.
Он простой в использовании как для простых, так и для сложных приложений с параллельными вычислениями.
Он обеспечивает относительно прозрачную масштабируемость с помощью своего использования Java Thread Pool Executor.
Он позволяет осуществлять взаимодействие между многими фоновыми потоками.
Вопрос 28
Что из следующего лучше всего описывает способы, с помощью которых потоки в AsyncTask и HaMeR фреймворках взаимодействуют.
Фоновые потоки в AsyncTask явно взаимодействуют с UI потоком.
Фоновые потоки в HaMeR неявно взаимодействуют с UI потоком.
Фоновые потоки в AsyncTask неявно взаимодействуют с UI потоком.
Фоновые потоки в HaMeR явно взаимодействуют с UI потоком.
Вопрос 29
Какие из следующих Gang-of-Four паттернов применяются к Android фреймворкам параллельных вычислений?
Active Object
Template Method
Visitor
Monitor Object
Strategy
Factory Method
Вопрос 30
Какой из следующих POSA паттернов применяются к Android фреймворкам параллельных вычислений?
Command Processor
Extension Interface
Bridge
Template Method
Half-Sync/Half-Async
Thread-Specific Storage
Вопрос 31
Какие из следующих паттернов применяются в соответствующих фреймворках?
Active Object применяется в Java ExecutorService.
Bridge применяется в HaMeR.
Command Processor применяется в HaMeR.
Factory Method применяется в AsyncTask.
Strategy применяется в HaMeR.
Thread-Specific Storage применяется в Java Executor.
Вопрос 32
Что из следующего является преимуществом применения паттерна Thread-Specific Storage?
Это позволяет подклассам переопределить методы.
Это отделяет интерфейс от реализации, так они могут изменяться независимо.
Это уменьшает накладные расходы синхронизации для доступа к объекту.
Это откладывает некоторые шаги в алгоритме параллельной обработки для подкласса.
Вопрос 33
Что из следующего является известным применением паттерна Thread-Specific Storage?
Класс Android Looper.
Фреймворк Java Executor.
Стандарт C errno macro.
Android IntentService.
Вопрос 34
Что из следующего является предназначением паттерна Command Processor?
Определить запросы сервиса как единицы параллельного вычисления и запускать запросы сервиса в разных потоках из запрашивающего клиентского потока.
Обеспечить нескольким потокам использовать одну «логически глобальную» точку доступа без накладных расходов блокировки доступа для каждого объекта.
Упаковывать функциональность приложения, а также его параметризацию, в объект, чтобы сделать его пригодным для использования в другом контексте.
Отделить асинхронную и синхронную обработку сервиса в системе параллельных вычислений, путем введения двух сообщающихся слоев – один для асинхронной и другой для синхронной обработки сервиса, для упрощения программирования без чрезмерного снижения производительности.
Вопрос 35
Что из следующего является негативным последствием использования паттерна Command Processor?
Поддержка двусторонних операций требует дополнительных усилий программирования.
Клиент не заблокирован в течении обработки.
Функциональность управляется отправителем, а не получателем.
Поддержка контекстной и зависящей от времени выполнения логики приложения.
Вопрос 36
Что из следующего является примером ситуации, при которой применяется паттерн Active Object?
Когда методы объекта могут блокироваться в течение длительного времени, в течение их исполнения.
Когда дополнительные возможности должны быть реализованы последовательно для всех запросов к сервису.
Когда методы интерфейса объекта должна определить свои границы параллельного вычисления.
Когда есть необходимость отделить решение о том, какой кусок кода должен быть выполнен, от решения, какой контекст или время этого должно произойти.
Когда это необходимо для модернизации унаследованного кода, чтобы быть поточно-безопасным.