2016-07-10 9 views
0

Ich habe eine Kachel, die, wenn sie aktiv ist, einen Timer ausführt, eine Aufgabe für diese fünf Minuten ausführt und dann nach einer gewissen Zeit in ihren inaktiven Zustand zurückkehrt.Einen TileService aktiv halten?

Das Problem, auf das ich jedoch stoße, ist der Service, der getötet wird. Ich rufe bereits startForeground(id) an, wenn der Timer startet, aber mein Service wird trotzdem trotzdem getötet. Ich gebe auch START_STICKY von onStartCommand(intent, flags, startID) zurück.

Gibt es trotzdem, um absolut zu verhindern, dass es getötet wird, oder habe ich hier nur Pech?

+1

Ich vermute stark, dass ein 'TileService' nicht gestartet, sondern gebunden ist. Wenn dies der Fall ist, wird 'serviceService()' nicht aufgerufen, und der Dienst wird zerstört, wenn der Client die Verbindung aufhebt. Ich schlage vor, dass Sie Ihre Geschäftslogik in einen separaten gewöhnlichen "Service" verschieben, damit Sie ihre Lebensdauer besser kontrollieren können. – CommonsWare

+0

@CommonsWare Ah, ich denke du bist hier auf etwas. Ich werde es versuchen und darauf zurückkommen! – russjr08

+0

@CommonsWare Ich wollte nur zu Ihnen zurück und Sie wissen lassen, dass es funktioniert :) – russjr08

Antwort

0

Ich habe es geschafft, dies zu lösen, indem Sie @ CommonWare's Ratschlag verwenden. Ich abstrahierte meine gesamte Logik in eine reguläre Klasse Service und rufe startService() aus der Serviceklasse meines Tile an.

Die eine Straße Beule Ich lief in war, herauszufinden, wie die Tile-Instanz auf den neuen Dienst zu bekommen (die Griffe der Fliese Text und Zustand zu aktualisieren), sondern löste dies durch eine Application Klasse mit einem Verweis auf die Fliese halten . (TileService aktualisiert diese Referenz jedes onClick, bevor Sie startService() anrufen)

Es ist wahrscheinlich nicht der sauberste und beste Weg, es zu tun, aber es ist die Art, die ich wählen, um für jetzt zu rollen.

+1

['Tile' ist' Parcelable'] (https://developer.android.com/reference/android/service/quicksettings/Tile. html) und könnte über ein 'Intent'-Extra an den anderen Dienst weitergegeben werden. – CommonsWare

+0

Guter Punkt! Ich bin mir nicht sicher, wie ich das vermisst habe. – russjr08

+0

Es scheint ein Problem mit der Verabschiedung der Absicht zu bestehen. Ich habe ein Problem mit dem Bug Tracker (https://code.google.com/p/android/issues/detail?id=216639) geöffnet, falls ich es nicht falsch mache :) – russjr08