moravianlibrary / kramerius-for-android

GNU General Public License v3.0
5 stars 0 forks source link

Pokud je aplikace zabita, zůstane viset částečně nefunkční notifikace o přehrávání #231

Closed rzeh4n closed 8 years ago

rzeh4n commented 8 years ago

"Pokud něco přehrávám (resp. přehraju kousek a zapauzuju) a něco zabije aplikaci, tak v notifikacích zůstane pořád skladba zobrazená, nejde ale přehrát, nic se neděje." Původně zmíněno v issue #154.

rzeh4n commented 8 years ago

Opraveno, i když ne ideálně. Pokud systém (nebo uživatel přes odswipnutí aplikace) zabije proces, ve kterém běží služba přehrávání (+případně aktivita), tak ještě asi 1-3 sekundy trvá, než notifikace zmizí. Pokud vím, nedá se to vyřešit lépe. Protože: Když je služba zabita, nedostane callback přes metodu onDestroy(). Nemá tak možnost notifikaci odstranit. Callback sice dostane případná aktivita, jenže v téhle situci není korektní zabít službu. Uživatel může být v jiné aktivitě v rámci aplikace a hudba by měla dále hrát. Defaultně je služba po zabití restartována (Service.START_STICKY), ale nedostane žádná data. Restartování služby znamená znovuspuštění kontextu aplikace, takže se provádí veškerá inicializace v metodě Application.onCreate(). Což v našem případě znamená mmj. inicializaci diskové cache, která chvilku trvá. Jakmile je tedy služba takto restartována bez dat (intent je null), lze tohle rozpoznat, skrýt notifikaci a službu finálně ukončit. Pokud by služba byla konfigurována jako "nerestartovat po zabití" (Setrvice.START_NOT_STICKY), tak by opět nebylo možné zjistit její zabití a odstranit notifikaci.

rzeh4n commented 8 years ago

Tohle spoždění by se mělo zmenšit, protože v příští verzi Zoomify prohlížečky se nebude cache inicilizovat po startu aplikace, ale až při vytvoření první instance TiledImageView - což se v tomhle případě nestane.