background service

S

swordi

Enthusiast
447
hallo

ich möchte einen service implementieren, der einmal täglich etwas in die datenbank speichert.

solange meine app läuft, funktioniert alles wunderbar, jedoch wenn die app weg ist, dann kann ich die datenbank nicht mehr benutzen.

übergebe sogar das db objekt dem service, aber es funktioniert einfach nichts mehr.
fehlermeldungen gibt es keine. der service gibt wohl gar nichts her.

irgendwelche ideen, wie ich das lösen kann?
 
Hi.

Auch auf die Gefahr hin, dass es Dir eh nix hilft: Schon mit nem ContentProvider getestet? Glaube anders kommst Du an Applikationsdaten nicht ran, wenn die App selbst nicht läuft.

Gruß,
Shini
 
danke für die hilfe

zum einen muss ich daten abfragen, zum anderen muss ich daten in die db schreiben.

das geht also nicht?
 
Das mit dem ContentProvider war einfach mal (vllt unüberlegt) in den Raum geworfen - ist halt die flexibelste Methode auf Daten zugreifen zu können.

Ich kann adhoc nicht sagen ob's nicht auch anders funktioniert. Interessiere würde es mich aber auch. Hab leider wenig Zeit ein wenig rumzuspielen :(

Gruß,
Shini
 
Vielleicht ist das Problem bei Dir ja schon gelöst worden, aber grundsätzlich, wenn Du einen Service schreibst, der unter der gleichen PID wie Deine App läuft steht dieser Dir nicht mehr zur Verfügung, wenn die Applikation stirbt. Ein Weg wäre, einen Remote Service zu schreiben, der eine eigene PID aufweist, und mit Deiner Applikation auf diesen zugreifen.

Ein Problem in diesem Zusammenhang sollte erwähnt werden: Wenn der Remote Service einmal z.B. durch Deine App gestartet wurde, bleibt dieser am Leben, bis er expliziert von Dir beendet wird und, auch dieser Fall kann eintreten, durch das OS, wenn Resourcen knapp werden. Also sollte Deine Application, bevor sie über diesen Service auf die DB zugreifen will, feststellen, ob der Service noch am Leben ist.

Vielleicht war das auch am Thema vorbei und dann einfach ignorieren ;)
 
danke für deine info

ich hab das jetzt ohne einen service gelöst. is sicher auch noch resourcenschonender, aber elleganter wärs so gewesen,
 
Ne ganz dumme Frage: Eignet sich dafür nicht die AlarmManager-Klasse?
 
cool diese klasse kannte ich noch nicht, kann ich vielleicht mal brauchen ;)

aber ich denke, das würde die benutzer nerven, wenn sich meine app dauernd öffnet.

aber trotzdem danke für den hinweis
 
Nur ein Kommentar zum AlarmManager:

Der kann natürlich startService() aufrufen, ohne dass der werte Anwender davon etwas mitbekommt. Allerding müssen der entsprechende BrodcastReceiver und der Service unterschiedlichen WAKE_UP policies folgen, sonst geht das in die Hose.

Zum anderen denke ich, dass dieser Manager hauptsächlich dafür zur Verfügung gestellt wurde um Code zu bestimmten, festgelegten Zeiten zu starten.

Ist der Zeitpunkt einer Aktion die ich starten will willkürlich, z.B. nach einem Ereignis, dessen Zeitpunkt ich nicht kenne, ist der Einsatz des AlarmManagers für die gestellte Aufgabe meiner bescheidenen Meinung nach nur zweite Wahl.

Ein praktisches Einsatzgebiet für den AlarmManager wäre zum Beispiel eine ANDROID App 'Pillenalarm' für die Mädels:)

Aber das ist nur ein Joke, oder nicht?
 
j2eejava schrieb:
Zum anderen denke ich, dass dieser Manager hauptsächlich dafür zur Verfügung gestellt wurde um Code zu bestimmten, festgelegten Zeiten zu starten.

Das dachte ich nämlich auch. Benutz ihn Momentan auch für eine Backup-App und lass den Alarm den Service aufrufen. Hätte ja sein können dass ich da grundsätzlich was mache das so nicht sein sollte :D.
Pillenalarm klingt doch gut...verlangt dann allerdings doch Interaktion ;).
 
Hallo!

Ich habe in meiner Applikation auch einen Remote Service am Laufen und was ich feststellte ist, dass sobald das Licht ausgeht die App in einen PowerSafe Zustand fällt.
Der Prozessor wird schlafen gelegt etc.
Man kann dies mit Hilfe des PowerManagers unterbinden, sodass bei mir nun alles auch mit dunklem Bildschirm weiterfunktioniert.
Vielleicht hilft dir das weiter.

Gruß
 
Du holst dir wahrscheinlich einen WakeLock. Das ist gerade bei RemoteServices eine unschöne Sache, da so der Akku des Users schnell leergesaugt wird. Würde ich um ehrlich zu sein lassen. Wenn du etwas periodisch tun musst, dann höre doch auf das TIME_TICK event, dass einmal die Minute kommt und eh das ganze System für kurze Zeit aufweckt.
 

Ähnliche Themen

A
Antworten
2
Aufrufe
1.131
AndrejT
A
H
Antworten
2
Aufrufe
812
HelloWorldx8
H
A
Antworten
0
Aufrufe
697
AndrejT
A
Zurück
Oben Unten