Android желісінде ағыны/қызметті қай кезде пайдалануға болады?

Жіп немесе қызмет қай кезде қолданылуы керек?

Аутентификация үшін пайдаланылуы керек пе? Мысалы, менің қолданбамда ағынды немесе қызметті пайдалануды қарастырдым (Active Directory арқылы аутентификация жасаймын.)

Әрқайсысы қашан пайдаланылатыны туралы мысалдар бар ма?

28

6 жауаптар

Update: It seems the Android documentation includes a corresponding clarification now, see http://developer.android.com/reference/android/app/Service.html#WhatIsAService.

Бастапқы жауап:

Android-де Service бір уақытта орындалуды қамтамасыз етпейді («фонда іске қосу»). Бұл шын мәнінде бағдарламаның орнына new арқылы Android жүйесіне арқылы жай ғана (және басқарылатын) қарапайым Java нысаны.

Қызметтің ең маңызды қасиеті, сондықтан жұмыс жүктемесін кейінге қалдыру туралы емес; бұл қарапайым ағындармен қол жеткізуге болады.

Қызмет нысанын ерекше ететін нәрсе - бұл сервисі ретінде Android жүйесі арқылы тіркелу. Бұл жүйе бұл нысанның қандай да бір қызмет түрін қамтамасыз ететінін және егер мүмкіндігінше ұзақ уақыт бойы сақталатындығын немесе тоқталмайынша екенін білейік. Қалыпты қолданба ағындары осы Android жүйесіне арнайы мағынасы жоқ және жүйенің қалауы бойынша әлдеқайда жомарт болады.

Сонымен, егер қосымша/ Activity белсенді болғанда, тек кейбір әрекеттер қажет болса, жұмыс істеу қажет нәрсе жасай алады.

Егер сізге қажет болса, белсенді ұстайтын құрамдас бөлшегі қажет болса, біраз уақыттан кейін Android жүйесі жадтан Activities жою туралы шешім қабылдаса да, қызметке бару керек , немесе тіпті «ең бастысы қызмет», ол жүйе арқылы одан да маңызды деп есептеледі, тіпті ресурстарды қалпына келтіру үшін тоқтатылады.

Әрине, егер Service нысаны Service болса, Service нысанын бір немесе бірнеше Thread объектінің өзі.

Өңдеу:

О, плюс: Қызмет, әрине, қызметке «қосылуға» болатын басқа бағдарламаларға кейбір қызметті (лерді) беруді қаласаңыз, тәсілі.

45
қосылды
Онда неге тек қана басталған объект емес, сондай-ақ байланыстырылған объект жасайсыз? Егер сіз оның іс-әрекеті басталғаннан кейін де, басқа операция кезінде де өмірді сақтап қалатын операция үшін айтатын болсаңыз, онда біз міндетті түрде қызмет көрсетуді пайдаланамыз.
қосылды автор Yonatan Nir, көзі
Құжатқа басқа қолданбалармен байланыстырылатын шектеулі қызмет керек болады.
қосылды автор Teng-pao Yu, көзі

Ұшақ ұзақ уақыт бойы жұмыс жасағанда пайдаланылады, ол пайдаланушы интерфейсін жаңартуға кедергі келтіреді. Егер бұл екінші немесе екіншісінен артық болса, оны өң өңіне орналастырғыңыз келуі және пайдаланушыға диалог немесе айналдырушы немесе бір нәрсе туралы хабарлауы мүмкін. Егер пайдаланушы интерфейсін 5 секундтан артық құлыптасаңыз, пайдаланушыға ОС-мен «kill or wait» опциясы ұсынылады.

Қызмет жекелеген ағындарда жұмыс істемейді, сондықтан ол пайдаланушы интерфейсін блоктайды, бірақ сіз қызметтің ішіндегі жаңа ағындарды жасай аласыз. Қызмет интервалда орын алатын немесе UI көрсетілмеген кезде іске қосу/тексеруді жалғастыратын нәрсе үшін көп қолданылады.

25
қосылды
Кафка дұрыс. Сервис негізгі ағынмен жұмыс істейді, сондықтан сіз жұмысыңызды AsyncThread-ге немесе Қызметтің ішіндегі басқа нәрсеге түсіруіңіз керек. UI иесі болмаса, бұл басты жіпте істемейді немесе болмайды немесе болмайды. Сіз әдетте деп есептей аласыз, бірақ әрқашан емес.
қосылды автор davidcesarino, көзі
Жазу үшін кешірім сұраймын ... AsyncTask-ны анықтағанмын!
қосылды автор davidcesarino, көзі
Android қызметтері сіздің OS-ң UI ағынына тыйым салады »- Бұл дегеніміз, егер сіздің қызметіңіз кез келген процессорды қарқынды (мысалы, MP3 ойнату) немесе блоктау (желілік операция) сияқты болса, онда ол бұл жұмысты орындау үшін өзінің жеке түйінін жасайды. «
қосылды автор Patrick Kafka, көзі
Қызмет жекелеген ағындарда жұмыс істемейді, сондықтан ол пайдаланушы интерфейсін бұғаттайды, Hmm? Қызметте UI жоқ. Қандай нәрсе бұғатталады?
қосылды автор Alex Gitelman, көзі
Менің болжауымша, қызметтен түскен қоңырау шалу қоңырау ұзақтығына белсенділік UI-ді блоктайды. Мүмкін, оны түсіндіру керек.
қосылды автор Alex Gitelman, көзі
Менің ойымша, @ JimmyB жауаптары дәлірек. Бұл жауап қате.
қосылды автор daramasala, көзі
4
қосылды

Егер сіз басқа қолданбалар пайдаланатын немесе қолданбалы әрекеттеріңізді ұзартатын нәрсе қажет болса, қызметті пайдаланыңыз. Қызмет көрсетудің жақсы үлгісі - бұл файлды жіберу, ол ұзақ уақытқа созылуы мүмкін және сіз осы уақыт ішінде қолданба арқылы пайдаланушыны мәжбүрлегіңіз келмейді. Басқа жағдайларда жағдайларда (әдетте AsyncTask немесе ұқсас) пайдаланылады.

Аутентификация үшін AsyncTask жақсы таңдау сияқты.

3
қосылды
+1 AsyncTask көмегімен аяқталды
қосылды автор Cody, көзі

Android Developer Guide бойынша ( http://developer.android.com/ нұсқаулық/құрамдас бөліктер/қызметтер.html # негіздері ):

Қызмет тек пайдаланушы сіздің қолданбамен жұмыс істемесе де, фонда іске қосылатын құрамдас бөлігі болып табылады. Осылайша, сізге қажет болған жағдайда ғана қызмет көрсету керек.

Егер сіз негізгі жұмыс ағыныдан тыс жұмыстарды орындауыңыз қажет болса, бірақ пайдаланушы қолданбада жұмыс істеп жатқан кезде ғана, сіз орнына жаңа қызмет жасау емес, жаңа қызмет жасауыңыз мүмкін. Мысалы, кейбір музыка ойнатқыңыз келсе, бірақ сіздің әрекетіңіз іске қосылғанда ғана onCreate() жүйесінде ағын құруыңыз мүмкін, оны onStart() ішінде іске қосыңыз, содан кейін оны onStop() ішінде тоқтатыңыз. Сондай-ақ, дәстүрлі Thread класының орнына AsyncTask немесе HandlerThread пайдалануды қарастырыңыз. Ағындар туралы қосымша ақпарат алу үшін Процестер және Threading құжатын қараңыз.

Есіңізде болсын, егер сіз қызметті пайдаланатын болсаңыз, ол әдепкі бойынша сіздің бағдарламаңыздың негізгі ағынында жұмыс істейді, сондықтан ол қарқынды немесе бұғаттау әрекеттерін орындаса, қызмет ішінде жаңа ағын жасауыңыз керек.

1
қосылды

Менің ойымша, басты айырмашылығы Android жүйесіне қатысты. Қызмет Android-тің инфрақұрылымының бір бөлігі болып табылады, сондықтан Android қызметі қызметтің жұмыс істеу бөлігі ретінде танылады және өлтіру қызметін соңғы нұсқасы ретінде қарастырады. Оның үстіне, басты қызметтің маңыздылығын жасау үшін қызмет көрсету басымдықтарын реттеуге болады. Аттар болсақ, android жіпті сақтаудың маңызды бөлігі ретінде танымайды. Сондықтан кәдімгі жіптерді өлтіруге әлдеқайда көп мүмкіндік бар.

Мысалы, сізде жұмыс ағыны басталып, одан кейін фонға өту әрекеті болса, android жұмыс ағыны ретінде жіпті танымаса, ол қолданбаның ештеңе жасамайтынын ойлайды, себебі ешқандай әрекет немесе қызмет іске қосылмайды және бүкіл бағдарламаны, соның ішінде жұмыс істейтін жіп.

1
қосылды