BG Development


  Reply to this topicStart new topicStart Poll

> Rest клиент в android
thrawn
Публикувано на: 23-05-2020, 07:54
Quote Post



Име:
Група: Потребител
Ранг: Почетен член

Мнения: 2920
Регистриран на: 17.01.17



Правя едно приложение, rest клиен за android. Спрял съм се на retrofit за http частта. До тук, всичко е ОК.
Чудя се обаче, каква да е архитектурата на приложението.

Retrofit има опция да работи синхронно или асинхронно, което значи, че може са се ползва директно в активити ако чете асинхронно (това е вариант 1).
Другия вариант е да ползвам сървиз (jobintentservice). Като тук има два варианта, защото избрания сервиз работи на отделна нишка. Мога да ползвам синхронно четене в нишката на сървизът (вариант 2) или асинхронно (вариант 3).

Дайте идея, какво да избера, че да си спестя последващо преправяне на приложението като/ако настъпя някоя мотика.

Това мнение е било редактирано от thrawn на 23-05-2020, 07:56
PMEmail Poster
Top
dvader
Публикувано на: 23-05-2020, 09:27
Quote Post


Group Icon
Име:
Група: VIP
Ранг: Почетен член

Мнения: 4827
Регистриран на: 12.07.05



Асинхронното е винаги по-добре от синхронното, ама е много по-трудно.
Избери лесното и не му мисли...


--------------------
I find your lack of faith disturbing
PM
Top
thrawn
Публикувано на: 23-05-2020, 09:51
Quote Post



Име:
Група: Потребител
Ранг: Почетен член

Мнения: 2920
Регистриран на: 17.01.17



Самия андроид е много параноичен на тая тема и като цяло, всичко което отнема време се прави асинхронно.

Проблемът е, че голяма част от асинхронните процеси спират с приложението (да речем, завърташ телефона или отваряш ново активити). Затова в андроид има сървиси (името е подвеждащо, това са "компоненти" които не зависят от лаивтайм-ът на УИ-а, но се изпълняват в една нишка с него). Затова, дори в сървиз трябва да се ползва асинхронна операция за да не писне андроидът.

От своя страна sdk -то предлага сървиси със собствена нишка (например intentservice) в които може да се пуска асинхронно каквото искаш. Тук пък проблемът е, че ОС я развиват постоянно и доста от механизмите за работа с нишки спират да работят на нови устройства (или ще спрат след време). Например, intentservice бива заменен от jobintentservice от андроид 8.

Ако използвам асинхронните методи които предлага библиотеката ставам зависим от тяхната реализация. А поставянето на логиката по пускане/четене на заявки в кода на активити (УИ компонент) ми изглежда леко грозно.
Затова клоня към вариант 2 или 3 ама нямам много опит с андроид и не знам какви проблеми могат да възникнат.

Приложението ще е с. sdk 26 (android 8) ако има значение.
PMEmail Poster
Top
dvader
Публикувано на: 23-05-2020, 13:14
Quote Post


Group Icon
Име:
Група: VIP
Ранг: Почетен член

Мнения: 4827
Регистриран на: 12.07.05



За какво ти е сървис?
Щом правиш клиент няма смисъл да пускаш заявки, когато приложението не е активно - няма кой да види резултата.


--------------------
I find your lack of faith disturbing
PM
Top
thrawn
Публикувано на: 23-05-2020, 13:35
Quote Post



Име:
Група: Потребител
Ранг: Почетен член

Мнения: 2920
Регистриран на: 17.01.17



При завъртане на устройството, ако се ползва УИ активити се ресетва. От тук, и всичко което работи на него (включително и задачите им). Затова са направили тия сървиси, които си работят на УИ нишката но не са толкова чувствителни.

От друга страна, някой операции е хубаво да се довършат след като са стартирани и поставени във фонов режим (това е разликата между jobintentservice и intentservice).
PMEmail Poster
Top
jean_lesn
Публикувано на: 23-05-2020, 15:37
Quote Post



Име: Ян Лесневски
Група: Потребител
Ранг: Почетен член

Мнения: 971
Регистриран на: 26.05.04



Вариант 2 ми изглежда ОК, ако може да сложиш и timeout на синхронната операция (да кажем, 60 сек.) . Иначе - вариант - 3.
PMUsers WebsiteICQ
Top
thrawn
Публикувано на: 23-05-2020, 15:52
Quote Post



Име:
Група: Потребител
Ранг: Почетен член

Мнения: 2920
Регистриран на: 17.01.17



Таймаут задължително. Библиотеката ползва okhttp където се конфигурират таймаути за четене и за свързване.
PMEmail Poster
Top
1 потребители преглеждат тази тема в момента (1 гости, 0 анонимни потребители)
Потребители, преглеждащи темата в момента:

Topic Options Reply to this topicStart new topicStart Poll

 


Copyright © 2003-2019 | BG Development | All Rights Reserved
RSS 2.0