W końcu przejdzie to do twojego pytania, ale najpierw chcę rozwiązać kilka kwestii poruszonych w różnych komentarzach do różnych odpowiedzi udzielonych już w momencie pisania tego tekstu. Nie mam zamiaru zmieniać zdania - są one raczej przeznaczone dla innych osób, które będą czytać ten post w przyszłości.
Chodzi o to, że nie mogę pozwolić, aby Android określił, kiedy moja aplikacja ma zostać zakończona. taki musi być wybór użytkownika.
Miliony ludzi są całkowicie zadowolone z modelu, w którym środowisko zamyka aplikację w razie potrzeby. Ci użytkownicy po prostu nie myślą o „zakończeniu” aplikacji na Androida, podobnie jak o „zakończeniu” strony internetowej lub „zakończeniu” termostatu.
Użytkownicy iPhone'a są w podobny sposób, ponieważ naciśnięcie przycisku iPhone'a niekoniecznie „czuje”, że aplikacja została zakończona, ponieważ wiele aplikacji iPhone'a odbiera miejsce, w którym użytkownik przerwał, nawet jeśli aplikacja naprawdę została zamknięta (ponieważ tylko iPhone obecnie umożliwia korzystanie z jednej aplikacji innej firmy).
Jak powiedziałem powyżej, w mojej aplikacji dzieje się wiele rzeczy (dane są PUSHed do urządzenia, listy z zadaniami, które zawsze powinny tam być, itp.).
Nie wiem, co oznaczają „listy z zadaniami, które zawsze powinny tam być”, ale „dane przekazywane do urządzenia” to przyjemna fikcja i w żadnym wypadku nie powinny być wykonywane przez działanie. Użyj zaplanowanego zadania (via AlarmManager
), aby zaktualizować dane w celu uzyskania maksymalnej niezawodności.
Nasi użytkownicy logują się i nie mogą robić tego za każdym razem, gdy otrzymają telefon, a Android zdecyduje się zabić aplikację.
Jest wiele aplikacji na iPhone'a i Androida. Zwykle dzieje się tak, ponieważ utrzymują oni poświadczenia logowania, a nie zmuszają użytkowników do logowania za każdym razem ręcznie.
Na przykład chcemy sprawdzić aktualizacje przy wychodzeniu z aplikacji
To błąd w każdym systemie operacyjnym. Z tego, co wiesz, przyczyną „zamknięcia” aplikacji jest zamknięcie systemu operacyjnego, a następnie proces aktualizacji zakończy się niepowodzeniem w połowie strumienia. Ogólnie rzecz biorąc, to nie jest dobra rzecz. Sprawdź aktualizacje przy starcie lub sprawdź aktualizacje całkowicie asynchronicznie (np. Poprzez zaplanowane zadanie), nigdy przy wyjściu.
Niektóre komentarze sugerują, że naciśnięcie przycisku Wstecz wcale nie zabija aplikacji (patrz link w moim pytaniu powyżej).
Naciśnięcie przycisku WSTECZ nie powoduje „zabicia aplikacji”. Kończy działanie, które było na ekranie, gdy użytkownik nacisnął przycisk WSTECZ.
Powinien on zostać zakończony tylko wtedy, gdy użytkownicy chcą go rozwiązać - nigdy w żaden inny sposób. Jeśli nie możesz pisać takich aplikacji w Androidzie, myślę, że Androida nie można używać do pisania prawdziwych aplikacji = (
Zatem aplikacje sieciowe również nie mogą. Lub WebOS , jeśli dobrze rozumiem ich model (jeszcze nie miałem okazji z nim grać). We wszystkich z nich użytkownicy niczego nie „kończą” - po prostu wychodzą. iPhone jest nieco inny, ponieważ obecnie pozwala tylko na uruchamianie jednej rzeczy naraz (z kilkoma wyjątkami), a zatem opuszczenie aplikacji oznacza dość natychmiastowe zakończenie aplikacji.
Czy istnieje sposób, aby naprawdę zamknąć aplikację?
Jak wszyscy ci mówili, użytkownicy (przez POWRÓT) lub kod (przez finish()
) mogą zamknąć bieżącą aktywność. Użytkownicy zwykle nie potrzebują niczego więcej, do poprawnie napisanych aplikacji, bardziej niż potrzebują opcji „wyjdź” do korzystania z aplikacji internetowych.
Z definicji nie ma dwóch takich samych środowisk aplikacji. Oznacza to, że możesz obserwować trendy w środowiskach, gdy pojawiają się nowe, a inne zostają pochowane.
Na przykład rośnie ruch próbujący wyeliminować pojęcie „pliku”. Większość aplikacji internetowych nie zmusza użytkowników do myślenia o plikach. Aplikacje iPhone zazwyczaj nie zmuszają użytkowników do myślenia o plikach. Aplikacje na Androida zazwyczaj nie zmuszają użytkowników do myślenia o plikach. I tak dalej.
Podobnie rośnie ruch próbujący wyeliminować pojęcie „zakończenia” aplikacji. Większość aplikacji sieci Web nie wymusza wylogowania użytkownika, ale domyślnie wylogowuje użytkownika po okresie bezczynności. To samo dotyczy Androida i, w mniejszym stopniu, iPhone'a (i ewentualnie WebOS).
Wymaga to większego nacisku na projektowanie aplikacji, koncentrowanie się na celach biznesowych i nieprzestrzeganie modelu implementacji powiązanego z poprzednim środowiskiem aplikacji. Programiści, którym brakuje czasu lub ochoty na zrobienie tego, będą sfrustrowani nowszymi środowiskami, które łamią istniejący model mentalny. Nie jest to wina żadnego środowiska, podobnie jak wina góry, a nie burz, które przepływają wokół niej.
Na przykład w niektórych środowiskach programistycznych, takich jak Hypercard i Smalltalk, aplikacja i narzędzia programistyczne były połączone w jednym zestawie. Ta koncepcja nie przyciągnęła zbyt wiele, poza rozszerzeniami językowymi aplikacji (np. VBA w Excelu , Lisp w AutoCAD ). Programiści, którzy wymyślili modele mentalne, które zakładały istnienie narzędzi programistycznych w samej aplikacji, musieli zatem zmienić swój model lub ograniczyć się do środowisk, w których ich model byłby prawdziwy.
Kiedy piszesz:
Wraz z innymi bałaganami, które odkryłem, myślę, że opracowanie naszej aplikacji na Androida nie nastąpi.
To wydaje się być najlepsze dla ciebie, na teraz. Podobnie odradzałbym ci próbę przeniesienia aplikacji do sieci, ponieważ niektóre z tych samych problemów, które zgłosiłeś z Androidem, znajdziesz również w aplikacjach internetowych (np. Brak „zakończenia”). Albo odwrotnie, jeśli kiedyś zrobić portu aplikacji do sieci, może się okazać, że przepływ aplikacji sieci Web mogą być lepiej dopasowane do Androida i można ponownie port Androida w tym czasie.