2012-09-18 24 views
6

Pracuję nad małą aplikacją użytkową, która skanuje kody kreskowe 2D, a następnie przesyła każdy kod kreskowy do usługi IntentService, w której wykonywane jest dłuższe zadanie.Czy można przechowywać wiele blokad Wake?

Po wyświetleniu aktywności urządzenie powinno nie dopuszczać do snu, dopóki kod kreskowy nie zostanie przetworzony w serwisie. Jeśli usługa zakończy przetwarzanie, zatrzymuje się sama, ale aktywność powinna być nadal widoczna.

chciałbym posiadać SCREEN_DIM_WAKE_LOCK blokada wybudzenia podczas cyklu aktywności, ale ten typ nie przeszkadza CPU od spania, ja też trzeba nabyć PARTIAL_WAKE_LOCK w działalności, gdy nowy kod 2D jest skanowany i zwolnij go w usłudze intent po jej przetworzeniu.

Celem SCREEN_DIM_WAKE_LOCK jest uniknięcie u użytkownika niedogodności związanych z pchnięciem przycisku zasilania co kilka sekund, aby obudzić urządzenie i móc odczytać nowy kod kreskowy. Użytkownik będzie musiał czytać wiele kodów jeden po drugim, a działanie powinno być dostępne nawet dla krótkich interwałów, w których nie ma interakcji użytkownika.

Wiem, że w Androidzie nie ma 100% gwarancji, że aplikacja jest na wierzchu, nie jest zamknięta lub jest na pierwszym planie z powodu kilku warunków, których moja aplikacja nie może kontrolować, ale chciałbym pójść tak daleko, jak to możliwe.

Czy możliwe jest posiadanie wielu blokad WakeLocks? Gdzie mogłyby zostać uznane za wchodzące w grę zarówno przez działanie, jak i usługę? (Singleton, rozszerzenie aplikacji?)

Odpowiedz

9

Istnieje możliwość posiadania wielu blokad WakeLock. W rzeczywistości trwa to cały czas, gdy wiele aplikacji synchronizuje się w tym samym czasie, gdy ekran jest wyłączony. (Wyobraź sobie, że Twoje aplikacje Gmail i Facebook synchronizują się w tym samym czasie, gdy ekran jest zablokowany, nie wiedzą o sobie nawzajem, mają różne blokady WakeLocks) Może być lub nie być różnymi typami WakeLocków

Android zapewni, że wszyscy oczekiwania są spełnione (maksymalne wyczerpanie baterii innymi słowy).

Moim zdaniem, wydaje mi się, że przesadziłeś z faktem, że potrzebujesz SCREEN_DIM_WAKE_LOCK, ponieważ może to przez przypadek drenować DUŻĄ baterię, ale mogę się mylić w zależności od twojego przypadku użycia.

Krótka odpowiedź brzmi TAK. Możesz przechowywać wiele funkcji WakeLocks, a Android (powinien) działać zgodnie z oczekiwaniami. Pamiętaj tylko, że właściwie wypuszczasz oba Wakelocks.

W kwestii umieszczania na górze ekranu, myślę, że powinieneś zwolnić WakeLock ze swojej aktywności, gdy przejdzie w stan Wstrzymany (kiedy jakoś inna aktywność jest na wierzchu lub celowo naciśnij przycisk zasilania). Ponieważ w tym momencie użytkownik wchodzi w interakcję z inną aplikacją, należy ją uszanować i pozwolić mu kontrolować własne zachowanie. Nie musisz rezygnować z częściowej blokady wybudzania ze swojej usługi, dopóki nie skończysz.

Nadzieja, że ​​to pomaga.

+0

+1. Ale zwalniam ekran WakeLock w 'onStop', ponieważ nie chcę, żeby spał, kiedy naciskam okno dialogowe. –

+0

Założę się, że gdy okno dialogowe jest z przodu, nie skanujesz już kodów kreskowych, ponieważ użytkownik musi odpowiedzieć na okno dialogowe, Czy nie jest w porządku, aby pozwolić systemowi spać, jeśli użycie nie odpowiada na dialog w czasie? – Madushan

+0

Tak, cóż, wszystko zależy od tego, jak długo zajmuje wyłącznik czasowy. Jeśli trwa to 3 sekundy, naciskanie przycisku zasilania jest denerwujące. Jeśli to potrwa dłużej, nic mi nie jest. W zależności od obciążenia pracy mogę nawet zrzucić blokadę ekranu. –