2010-09-14 18 views
5

Próbuję sprawować niewielką kontrolę nad stanem ikony na pasku stanu. Chcę być w stanie wykonać następujące czynności:Sterowanie ikoną paska stanu Android

  1. Trzymać ikonę widoczną na pasku stanu, tak długo gdy aplikacja jest uruchomiona, nawet jeśli użytkownik zdecyduje się usunąć pasek stanu.
  2. Czy usunąć ikonę z paska stanu , jeśli aplikacja zostanie zamknięta, nawet (w szczególności), jeśli zostanie zabita? Rozumiem, że mogę go usunąć, gdy aplikacja zostanie wyraźnie zamknięta, ale chcę się upewnić, że zniknie, jeśli aplikacja zostanie zabita. Muszę przyznać, że jeszcze tego nie próbowałem.

Nie mogłem uzyskać dobrej informacji na ten temat, mimo że widziałem aplikacje, które wydają się to robić.

Odpowiedz

4

1) Zajrzyj na stronę z dokumentami dla programistów pod numerem status bar notifications. Zwróć też uwagę, że warto przyjrzeć się stałej FLAG_NO_CLEAR, która powinna uwzględniać twój stan.

2) Utrzymywanie ikony niekoniecznie jest złą rzeczą w przypadku, gdy aplikacja jest zabijana, i w pewnym stopniu zależy od celu aplikacji. W szczególności, jeśli aplikacja przechodzi w tle, a potem ginie, leaving the icon has actually been noted to be expected behavior by one of Google's engineers:

Prawidłowe, onDestroy() nie jest wywoływana kiedy zostanie zabity. Jest to ta sama aktywność co - jądro zabija procesy w razie potrzeby, nie czekając na aplikację w trybie 0-.

Pasek stanu prawidłowo trzyma ikonę . Usługa zostanie ponownie uruchomiona: ; to nie zostało zatrzymane.

To normalne, że usługi w tle są regularnie zabijane. To zamierzone, ponieważ generalnie usługi działające w tle nie są czymś użytkownik jest bezpośrednio świadomi i ponownego uruchamiania procesów każdy teraz a następnie unika problemów z takimi usługi spożywania coraz większych ilości RAM.

Jeśli usługa jest czymś użytkownik jest rzeczywiście świadomi (takich jak muzyka odtwarzania), należy rozważyć Service.startForeground().

Mimo to ikona powinna i tak zniknąć. Inne aplikacje z trwałymi ikonami (Meebo przychodzi na myśl) znikną, jeśli zabijesz ich za pomocą menedżera zadań. Nie jestem jednak pewien, czy tak się stanie we wszystkich przypadkach. Jeśli twoja aplikacja zostanie zabita w tle przez OOM, najprawdopodobniej nie będziesz chciał jej usunąć.

+0

FLAG_NO_CLEAR działa zgodnie z oczekiwaniami, powinienem był to złapać, dzięki! Z jakiegoś powodu pasek stanu nie jest czyszczony, gdy zabijam aplikację.Zasadniczo chcę, aby ikona paska stanu wskazała, czy aplikacja faktycznie działa, czy też nie, więc chcę ją wyczyścić, jeśli zostanie zatrzymana z jakiegokolwiek powodu. Oczywiście onDestroy() usuwam, ale nie ustąpi, gdy aplikacja zostanie zabita lub Force Closes. – KMP14

+0

Nie jestem pewien, jak radzą sobie z tym inne aplikacje, ponieważ 'onDestroy()' nie jest wywoływana, gdy aplikacja jest zamykana lub ulega awarii. Jest to jednak temat, który pojawił się wcześniej na listach mailingowych. Może zacznij od przyjrzenia się tutaj: http://www.mail-archive.com/[email protected]/msg59044.html – eldarerathis

Powiązane problemy