Android бағдарламасының уылдырық шашатын сервисінің арасындағы айырмашылық

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

Мәселе мынада, Application.onCreate() функциясының орнына Сервисден шыққан тақырыпқа жұмыс істеудің себебі бар ма? Сервис «фон» жұмысын орындауы керек (ол пайдаланылмайды, егер Thread пайдаланылмаса, ол біледі), бұл қызметден тәуелсіз және ешқандай әрекет көрінбесе де жұмыс істей алады. Қолданбаға негізделген ағынның көмегімен мұның бәрі бірдей. Қызметті пайдаланбаған жағдайда, ол іс-әрекетті күрделіліктен жояды, себебі әрекет тек қосымшаның синглонына қол жеткізеді. Менің білуімше, Қызметке қосылуымның қажеті жоқ.

Қызметті пайдалануды болдырмас үшін, өмірлік циклдің бұрыштары бойынша біраз уақыт аламын ба? Бұл әдіс бойынша жалғыз алаңдаушылық бар, бірақ басқаша жағдайда мен Қызметтің пайдасына сатылмаймын.

10
Мынаны қараңыз: stackoverflow.com/questions/2633334/…
қосылды автор AlikElzin-kilaka, көзі

2 жауаптар

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

Қызметтер Activity енді қол жетімді болмаса да, фонда жұмыс істей алады. Олар сіздің қолданба жақын арада ешқандай пайдаланушы қатысуынсыз жұмыс істеуді жалғастыруы керек болған жағдайда пайдалануға арналған. Service ішіндегі Thread функциясын іске қоссаңыз, бұл жұмыс пайдаланушыдан шыққанда да жұмыс істей береді. Бұл кейде пайдалы болуы мүмкін, өйткені пайдаланушы шынымен үлкен файлды қотарып алуды жалғастыруы мүмкін, бірақ бағдарлама алдыңғы кезекте жұмыс істеуді қаламайды. Содан кейін бірнеше сағат (күн, ай, жыл) кейін пайдаланушы файлды оқу үшін бағдарламаға қайта кіре алады.

Дегенмен, нәтижеге сүйене отырып UI үнемі жаңартуға қажет ағынды пайдалансаңыз, оны Қызметте іске қосу пайдалы болуы мүмкін, себебі ол Қызметте іске қосудың нақты мақсаты жоқ. Сонымен қатар, бағдарламаңызда сіздің Thread қызметіңізге UI қызметімен сөйлесу оңай болады, егер ол Қызметтен емес, Қызметте болса. (Кейбір өнімділік артықшылықтары болуы мүмкін, себебі Android-де оның тізіміндегі тағы бір Қызметті өңдеуге тура келмейді, бірақ бұл менің тарапымнан таза ойлар.

ЕСКЕРТПЕ: Әрекеттерден жасалған әрекеттер әлі де қызмет тоқтатылғанда да жұмысын жалғастырады. Дегенмен, бұл жай ғана қолданбаның әлі де есте қалғаны. Әрекет енді көрінбейтін болғанда, Қызмет және оның ағыны Сервис ағыны қарағанда жадтан жойылатын артықшылыққа ие.

11
қосылды
О, күтемін. Ондай жағдайда, Сізге ортақ пайдалану қажет болған жағдайда, сіз Қызметке бірнеше қосымшалардан байланысу қабілетіңізді жоғалтасыз деп ойлайтын едім. Сондай-ақ, қосымшаның қосымшасы қолданыстағы ешқандай қызметтер болмаса, жоюға жатады деп ойлаймын, сондықтан пайдаланушы соңғы қосымшаны стекке қалдырғаннан кейін, жіп жойылған жағдайда, бірінші қызметінде.
қосылды автор DeeV, көзі
Мен өмірлік цикл туралы білемін. Сұрақ болды, мен Сервисті пайдаланбай, жіпті өздігінен іске қосу арқылы не жоғалттым? Мен Іс-шараға емес, Іс-шараға емес, (сіз атап өткендей, Тұздың өмірлік циклы үшін маңызды емес) ағыны уылдырықтаймын. Қызметтердің жүйе бойынша өлімге ұшырауы ықтимал екенін білемін, бірақ менің қызметім жойылып кетсе де, ол қолданысқа кепілдік бермейді. Қолданба ешқандай әрекетсіз өмір сүре алады.
қосылды автор Mark Herscher, көзі

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

See http://developer.android.com/guide/topics/fundamentals/processes-and-threads.html

4
қосылды
Errr, иә! Егер сіздің кодыңыз жұмыс істеп жатқанын білмейтін болсаңыз, онда сіз оны белсенділік ағыны ішінен өшіре аласыз және ол өлтірілген бірінші тапсырма болады. Бірақ егер сіз өзіңіздің ағыныңызды мүмкіндігінше ұзақ уақыт бойы қалғыңыз келсе, оны қызмет көрсету ағыны ішінен өсіру керек.
қосылды автор Teasel, көзі
Сондықтан егер мен барлық қызмет түрлерінің жасырын болғанын қаламайтын болсам, онда не істеу керек?
қосылды автор Mark Herscher, көзі