Активность Android / Намерение против Qt Signal / Слот против iPhone? /? - PullRequest
4 голосов
/ 28 января 2011

Я пытаюсь исследовать сходство связи между объектами / компонентами на разных мобильных платформах.

В Android существует концепция Activity / Intent дляПередав информацию, на Qt у нас есть сигналов и слотов .

Вопросы, которые возникают здесь:

  1. Допустимо ли сравнивать активность/ Намерение сигнализировать / концепция слота? Главным отличием с моей точки зрения является разный уровень детализации.В то время как Действия / Интенты работают на «целых экранах» (точнее, Действия, так как Деятельность не обязательно представляет отдельный экран), Сигналы / Слоты определяются для более мелких объектов, таких как Виджеты (фактически, для каждого класса, которыйявляется производным от QObject).

  2. Имея в виду независимость от платформы, вы бы сказали, что концепции принципиально отличаются , или разработчик может преодолеть технические различия вТермины объектной коммуникации и «абстрактной» логики приложения достаточно, чтобы минимизировать усилия по переносу?как?

  3. существует ли сопоставимая концепция на iOS? (например, механизм Target-Action - или, более того, делегаты или уведомления, предоставляемые ObjectiveC).

Ответы [ 4 ]

1 голос
/ 08 октября 2011
  1. Сигнал и слот Qt нельзя сравнивать с намерениями Android. Сигнал и слот относятся ко всему в Qt; он происходит от класса QObject, который является суперклассом всех объектов Qt, отсюда и центральная концепция Qt. С другой стороны, Android использует несколько механизмов для взаимодействия объектов. Он использует намерения для действий и служб, но также использует обратные вызовы для обработки событий. Они также предлагают различные уровни гибкости: вы можете передавать столько аргументов сигналам и слотам, вы можете прикреплять некоторые данные к намерениям, но вы можете только передавать объект просмотра в обратные вызовы Android.
  2. Это принципиально отличается, поскольку Android не использует только намерения, как описано выше.
  3. не могу ответить, так как я не программист iOS.
1 голос
/ 31 января 2011

Я могу говорить только о разнице между намерениями андроида и iOS - никогда не делал ничего в QT, но здесь мы идем:
Намерения (по крайней мере, насколько мне известно) в основном используются для сигнализации об изменении состояния телефона илиизменить состояние жизненного цикла различных объектов.Они обычно не используются для более тонкой детализации, например, для уведомления об измененных вейлах и т. Д.
В iOS существует система уведомлений как для мелкозернистой, так и для крупнозернистой информации (так называемое состояние системы и даже изменения модели), нофункционирует совсем по-другому.

Я не вижу прямого сходства между обоими этими механизмами.С помощью Android Intents я могу запускать новые Activites и, возможно, передавать некоторые значения в другое действие.С помощью уведомлений iOS я могу передавать любые значения от A до B, но мне придется реализовать свою собственную логику, например, чтобы запустить службу для определенного уведомления.Кроме того, управление уведомлениями в iOS гораздо более очевидно, чем Android Intents.

0 голосов
/ 04 января 2012

Прошло много времени с тех пор, как я смотрел на Qt, но я помню, что сигналы / слоты выглядели очень похоже на селекторы Objective-C (iOS) (особенно для методов IBAction).Типичное использование

[button addTarget: controller action: @selector(resetState) forControlEvents: UIControlEventTouchUpInside];

против

Qobject::connect(button, SIGNAL(clicked()), &controller, SLOT(resetState()));
0 голосов
/ 01 февраля 2011

Для сравнения уведомлений на iOS и Intents на Android я пришел со следующей сводкой:

Общие черты:

  • Оба механизма можно использовать для регистрации на любомуведомления, сообщающие о системных изменениях потребностей вашего приложения (например, об изменении уровня заряда батареи)
  • оба типа могут вызывать изменения состояния жизненного цикла

Различия:

  • Гранулярностьуровень
    • Содержимое используется для передачи информации между операциями, службами или получателями широковещательной рассылки
    • Уведомления могут использоваться для передачи информации между объектами любого типа, будь то мелкозернистое уведомление для sbdy, когдаизменения отдельных элементов графического интерфейса или грубая грануляция для реагирования при поступлении определенных системных событий
  • IPC
    • Intents можно использовать для связи между приложениями (неявные Intents, не указан конкретный компонент приема, позднее связывание), а также для связи внутри приложения(явное Интентирование, указанный компонент получения, раннее связывание)
    • Уведомления ограничиваются внутрисайтовым обменом данными на iOS (есть ли другой способ добиться этого?)
  • Вариант использования:
    • Обычно содержимое используется для запуска других действий (например, отображения другого экрана) или запуска некоторых служб (например, для воспроизведения музыки в фоновом режиме).
    • на iOS, нужно будет реализовать собственную логику для перехода на другой экран или начать проигрывать музыку в фоновом режиме.

В конце концов, чтоМой вопрос сводится к следующему: , поскольку эти концепции кажутся принципиально разными, является ли это настоящим препятствием для разработки независимых от платформы Android- / iOS-приложений?
Или у вас естьпредложения о том, как «абстрагировать» эти механизмы и минимизировать усилия по переносу? (кроссплатформенные решения также должны иметь средства для перевода этих концепций в нативный код за кулисами?)

...