2012-02-07 17 views
5

Po użyciu START_STICKY, jeśli moja usługa zostanie rozbita/zabita przez menedżera zadań, automatycznie uruchomi się ponownie. Widzę, że istnieje lista usług, które zostaną zrestartowane, ale w innej kolejności. Chcę nadać priorytet ponownemu uruchomieniu usługi, aby rozpocząć ją wcześniej, umieszczając ją na wierzchu kolejki.Priorytetowe planowanie ponownego uruchamiania awarii usługi Android

Zazwyczaj ponowne uruchomienie usługi zajmuje od 15 do 45 sekund. Czy istnieje sposób na nadanie priorytetu lub uruchomienie tej usługi szybciej niż inne.

Odpowiedz

0

Czy Twoja usługa długo działa? Jeśli tak, spróbuj się go pozbyć i uruchom tylko wtedy, gdy jest to potrzebne. Serwisy Android nie są uruchamiane jako demony, mają działać w tle jako pracownicy krótko żyjący, gdy nie jest wymagana interakcja i interfejs użytkownika.

Większość usług "Po prostu siedzę" może słuchać audycji i być miłym obywatelem w ten sposób.

Inna sprawa: jeśli Twoja usługa jest już krótka, a zabójca zadań jest aktywny, jest to łatwe: jest to problem użytkowników, a nie Twoja wina. System nie potrzebuje zabójców zadań i nie powinieneś się nimi zająć. Użytkownik powinien wiedzieć, że korzystanie z nich nie jest zdrowe.

+0

Mój jest "kolejną rzeczą". Uważam, że powinienem dodać wiadomość, aby dodać moją aplikację do listy ignorowanych Menedżera zadań. – dcanh121

0

Domyślam się, że to rozwiązanie jest trochę brudne, ale możesz użyć nowej usługi, która zaczyna się od START_STICKY i ustawić wszystkie inne usługi na START_NOT_STICKY.

Można wtedy użyć nowej usługi, aby uruchomić wszystkie inne usługi (choć niekoniecznie jest to konieczne). Jest to w rzeczywistości łatwa implementacja, ponieważ możesz przekazać cały zamiar do usługi, która zostanie uruchomiona.

Następnie można dodać transmisję do wszystkich usług OnDestroy(), aby poinformować nową usługę, że jeden ze starych został zabity przez system. Możesz również przekazać stare intencje początkowe przez OnDestroy(), aby ponownie uruchomić.

Jeśli twoja nowa usługa zostanie zabita, możesz sprawdzić po ponownym uruchomieniu, jeśli któraś z pozostałych usług została zabita, a następnie nadać priorytet ponownemu uruchomieniu.

Powiązane problemy