Forum » Programiranje » [Android] Informacija iz Servic-a v Main Activity
[Android] Informacija iz Servic-a v Main Activity
shadeX ::
Stvar je taka.
Imam MainActivity in imam Service. V Service razredu imam TimerTask, ki požene kodo vsake X milisekund ( Runnable object - drug thread ). Ta koda pridobi neko informacijo ( int ). To informacijo bi rad spravil iz Servic-a v MainActivity in nato prikazal na zaslonu.. seveda updejtano vsake X milisekund. Kadar se run() metoda zažene. Stvar bi rad naredil s Handlerjem. A mi kdo zna obrazložit kako bi to naredil?
p.s Service in run() koda laufata normalno ker vidim v LOGCAT-u. Samo še tisto mi manjka in sicer prenest eno informacijo iz servic-a v activity preko hanlderja.
Hvala.
Imam MainActivity in imam Service. V Service razredu imam TimerTask, ki požene kodo vsake X milisekund ( Runnable object - drug thread ). Ta koda pridobi neko informacijo ( int ). To informacijo bi rad spravil iz Servic-a v MainActivity in nato prikazal na zaslonu.. seveda updejtano vsake X milisekund. Kadar se run() metoda zažene. Stvar bi rad naredil s Handlerjem. A mi kdo zna obrazložit kako bi to naredil?
p.s Service in run() koda laufata normalno ker vidim v LOGCAT-u. Samo še tisto mi manjka in sicer prenest eno informacijo iz servic-a v activity preko hanlderja.
Hvala.
Mavrik ::
Pobindati moraš service - poglej si pod "Bound" tule: Services. V service morš integrirat "onBind()", ki vrne IBinder, čez katerega potem kličeš stvari in dobivaš podatke s storitve.
The truth is rarely pure and never simple.
shadeX ::
Popolnoma razumem. Je pa tukaj finta da želim da se service izvaja tudi ko na zaslonu ne bo Main Activitja. Če prav razumem , če bindam service pomeni da se ta service ustavi (unbind ? ) s tem ko activity ki binda service izgine, jaz bi pa potreboval da bi ta service še deloval ( to je main priority ). Tista informacija ki se pa izpisuje na prvem activityju je pa tako zgolj za "lepo videti", ko uporabnik zažene aplikacijo.
Mavrik ::
Ja, saj kot piše v dokumentaciji - ni razloga da service ne more bit oboje - ročno poštartan in pobindan. V onBind() narediš samo logiko po pošilja podatke. Še vedno lahko maš vse, kar mora laufat v ozadju v "onStartCommand" in potem poštartaš service s "startService()".
Ti dve opciji se ne izključujeta. Če se bindaš na service, ki ne laufa, se bo pognal, če se bindaš v service, ki laufa pa boš dobil trenutno instanco.
(Izkoristiš lahko to, da se "onStartCommand" požene samo, ko service štartaš s "startService", onBind() pa samo ko se bindaš na njega.)
Ti dve opciji se ne izključujeta. Če se bindaš na service, ki ne laufa, se bo pognal, če se bindaš v service, ki laufa pa boš dobil trenutno instanco.
(Izkoristiš lahko to, da se "onStartCommand" požene samo, ko service štartaš s "startService", onBind() pa samo ko se bindaš na njega.)
The truth is rarely pure and never simple.
Zgodovina sprememb…
- spremenil: Mavrik ()
Kocka ::
Če rabiš pošiljati podatke iz Servce v Activity se to lahko naredi z pošiljanjem Broadcast Intentov iz Service-a.
V Service-u vsakič kreiraš nov Intent in notri stlačiš podatke, ki jih želiš poslati. Intent pošlješ s funkcijo sendBroadcast(Intent).
V Activity-ju v funkciji onResume() prijaviš en nov Broadcast Receiver s funkcijo registerReceiver(BroadcastReceiver, IntentFilter), ki sliši na tvoje Intente. V Receiverju overridaš funkcijo onReceive(Intent) in v njej prebereš podatke iz prejetega Intent-a in osveži zaslon Activity-ja.
V funkciji onPause() v istem Activity-ju ne pozabi odjaviti Receiverja s funkcijo unregisterReceiver(), tako da Activity sprejema podatke samo, kadar je v ospredju, drugače pa ne. Service pri tem teče nemoteno ne glede na stanje Activity-ja in ves čas pošilja Intent-e.
V Service-u vsakič kreiraš nov Intent in notri stlačiš podatke, ki jih želiš poslati. Intent pošlješ s funkcijo sendBroadcast(Intent).
V Activity-ju v funkciji onResume() prijaviš en nov Broadcast Receiver s funkcijo registerReceiver(BroadcastReceiver, IntentFilter), ki sliši na tvoje Intente. V Receiverju overridaš funkcijo onReceive(Intent) in v njej prebereš podatke iz prejetega Intent-a in osveži zaslon Activity-ja.
V funkciji onPause() v istem Activity-ju ne pozabi odjaviti Receiverja s funkcijo unregisterReceiver(), tako da Activity sprejema podatke samo, kadar je v ospredju, drugače pa ne. Service pri tem teče nemoteno ne glede na stanje Activity-ja in ves čas pošilja Intent-e.
i386 ::
Da ne bom odpiral nove teme bom kar tu vprašal. Sem bol začetnik v androidu in imam podoben problem, le da imam jaz service, ki bi komuniciral z drugo napravo in pošiljal podatke iz te naprave v activity-je za prikaz. Imam 2 activity-ja in me zanima če se da oba Bindat na service brez posledic na komunikacijo oz. na izvajanje servica.
hvala
hvala
i386 ::
Dodatno vprašanje. Se da v AndroidManifestu določit, da se service zalaufa ob zagonu aplikacije in ustavi ob zaprtju aplikacije? Ali bi bil isti učinek, če bi v MainActivityju v funkciji onDestroy() zaprl service, zagnal pa v onCreatu?
Vredno ogleda ...
Tema | Ogledi | Zadnje sporočilo | |
---|---|---|---|
Tema | Ogledi | Zadnje sporočilo | |
» | [Android] Bluetooth aplikacijaOddelek: Programiranje | 1082 (945) | marjan_h |
» | [Android] Program se sesuje pri zagonuOddelek: Programiranje | 834 (643) | Xpie |
» | [Java] "Uničenje" objekta ?Oddelek: Programiranje | 1207 (899) | shadeX |
» | [android] vstavljanje slikeOddelek: Programiranje | 1233 (1130) | messi |
» | [Android]Vrnitev v "parent" activityOddelek: Programiranje | 1488 (1361) | KernelPanic |