» »

[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.

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.)
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.

shadeX ::

Hvala Kocka. Ravno tako sem naredil in stvar deluje.

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

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 ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
»

[Android] Bluetooth aplikacija

Oddelek: Programiranje
51064 (927) marjan_h
»

[Android] Program se sesuje pri zagonu

Oddelek: Programiranje
7813 (622) Xpie
»

[Java] "Uničenje" objekta ?

Oddelek: Programiranje
111181 (873) shadeX
»

[android] vstavljanje slike

Oddelek: Programiranje
71216 (1113) messi
»

[Android]Vrnitev v "parent" activity

Oddelek: Programiranje
101441 (1314) KernelPanic

Več podobnih tem