2010-12-29 10 views
5

Próbuję napisać bardzo prostą aplikację, która wykona tylko jedną bardzo prostą akcję nie-GUI, a następnie wyświetli krótką wiadomość (używając toastu, na do góry, co było już na ekranie, np. ekran główny) i zakończyć. To wszystko.jak całkowicie pozbyć się GUI działania (unikaj czarnego ekranu)

To prawie działa, ale nadal otrzymuję krótki czarny ekran po uruchomieniu aplikacji, a następnie powrót do ekranu głównego i wszystko działa tak, jak zamierzam po tym. Pomyślałem, że nie używanie setContentView w mojej działalności (a więc pozbawienie go widoku) wystarczyłoby, aby ominąć czarny ekran, ale wciąż wyskakuje. Proszę zauważyć, że (jak sugerowano w pokrewnym pytaniu), usługa nie jest odpowiedzią na mój problem. Chcę tylko aplikację bez GUI (z wyjątkiem jednego toastu), która uruchamia się i kończy od razu. Dzięki :)

+1

Byłoby prawdopodobnie pomocne, gdybyś wyjaśnił, dlaczego usługa nie jest odpowiedzią na twój problem. Brzmi to bardzo zorientowane na usługi. – Matt

+1

Po pierwsze, właśnie dlatego, że nie chcę, aby mój proces działał w tle, tak jak ma to miejsce w przypadku usług. Chcę szybko i czysto wchodzić i wychodzić. Po drugie, dokumentacja systemu Android bezpośrednio stwierdza, że ​​działania nie muszą mieć interfejsu użytkownika, ale nie znalazłem sposobu, aby to zrobić. (Odpowiedź 1 już rozwiązała mój problem) Dzięki. – shutou

Odpowiedz

17

W <activity> w oczywistego zastosowania

android:theme="@android:style/Theme.NoDisplay" 

Uwaga ta zakłada, że zadzwoni pod numer finish() przed powrotem z onResume(). Jeśli masz zamiar wykonać więcej pracy po tym czasie (na przykład, jeśli będziesz robić jakąkolwiek sieć lub inne coś, czego nie można zrobić szybko synchronicznie), prawdopodobnie będziesz chciał rozpocząć usługę, aby zająć się pracą do platforma, której proces powinien kontynuować po zakończeniu działania.

+0

Świetnie! Właśnie tego potrzebowałem. Właśnie dlatego, że nie chcę, aby mój proces działał w tle. Dzięki stary! – shutou

+0

@shutou: Jest to prawdopodobnie (choć nie mam pojęcia) więcej niż na początku usługi. Nie musisz pozwolić, aby usługa nadal działała w tle. Zobacz moją odpowiedź na moją odpowiedź. – Falmarri

+0

Używam aktywności wpisu jako działania programu uruchamiającego, ponieważ faktyczna aktywność musi zostać określona za pomocą jakiejś logiki (np. Wstęp, rejestracja lub treść). Przedtem również pokazywałaby się działalność związana z wejściem, co było denerwujące, ale teraz zniknęło! Dzięki – Meanman

-1

usługa nie jest odpowiedź na moje problemu

Tak jest

+0

To może być alternatywny sposób robienia tego, co chcę, ale jak widać w odpowiedzi, możliwe jest wyłączenie wyświetlania interfejsu aplikacji. A ponieważ nie chcę, aby procesy działające w tle były uruchamiane po wykonaniu mojej prostej aplikacji, uznałem, że usługa może być czymś więcej, niż potrzebuję. Przyznaję jednak, że nadal nie wiem wystarczająco dużo, aby być pewnym, czy usługa może być bardziej wydajna niż rozwiązanie podane w odpowiedzi 1, co pozwala na to, że moja aplikacja ma tylko minimalną aktywność, która nie obejmuje żadnych dodatkowych procesów lub wątki. Mogę dowiedzieć się więcej o usługach, aby bardziej szczegółowo rozważyć plusy i minusy. Dzięki – shutou

+0

Usługi nie tworzą dodatkowych procesów ani wątków. Usługa jest zasadniczo działalnością bez GUI. Nie sprawdzałem dokładnie kodu źródłowego, ale będę to prawie dokładnie. Nie musisz opuszczać usługi. W rzeczywistości nie rób tego. Wystarczy uruchomić usługę, wykonać pracę, a następnie wywołać 'stopSelf()' – Falmarri

0

Brzmi jak zadanie dla IntentService. Wysyłasz intencję, a jeśli nie jest uruchomiona, zaczyna się, a następnie traktuje wszystkie otrzymane intencje, a następnie zatrzymuje. Krótkie i proste.

Powiązane problemy