Witajcie,
mam sobie kilka aktywności w apce i chciałbym żeby po naciśnięciu przycisku wstecz na głównej aktywności następowało wyjście z aplikacji. Powiedzmy, ze hierarchia jest następująca: A -> B ->C. W metodzie onBackPressed w A mam dane finish(). Przy takiej konfiguracji zamyka aktywność A i pojawiają się tamte poprzednie. Przeczytałem w różnych miejscach o jakichś flagach itd. ale to niewiele dawało.
Z góry dzięki za pomoc.
Nie ma sensu.
Nie chce mi się szukać, ale gdy przeskoczyłem z uczenia się, pisząc programy deskopowe, na androida to strasznie mnie denerwowało, że back/quit nie wywoływało całkowitego wyłączenia aplikacji. Jest masa tematów na stacku odradzających tego rodzaju prób i główną radą było co najwyżej zastopowanie wszelkiego rodzaju operacji działających w czasie rzeczywistym i nie wymagających aktywnej aplikacji (np. onPause i zastopowanie odbieranie danych z gps).
Konkluzja ze stacka to to, że twórcy androida celowo zostawili to w ten sposób, żeby system sam decydował czy potrzebuje więcej pamięci i w takim wypadku automatyczne zamykał którąś z aplikacji.
Oczywiście nie daję tutaj odpowiedzi "jak napisać wyłączenie", da się bo sam w którymś kodzie to testowałem, ale biorąc pod uwagę to co napisałem wyżej, dałem sobie z tym spokój.
Taka jest moja aktualna opinia, ale poczekam aż wypowiedzą się mędrcy Androida:).
To prawda. W wielu miejscach widziałem te wpisy, które odradzały. Ostatecznie zawsze można samemu zamknąć aplikację wchodząc do tego menu wyświetlającego aktywne apki i tam kliknąć krzyżyk. Jednak sam np używam u siebie na telefonie przegądarki Dolphin, którą bez problemu można zamknąć :) To samo jakieś Yanosiki czy inne cuda. Ile razy miałem tak, że wychodzę z samochodu, wydaje mi się, że wszystko zamknięte a ten mi jeszcze gada, ze mam skręcić w lewo. Dopiero jak się porządnie przyjrzałem, to znalazłem możliwość całkowitego wyłączenia.
Abstrahując od tych dywagacji znalazłem chyba coś na kształt rozwiązania. Są w sumie dwie opcje. Jeśli jestem w aktywności A mogę chcieć całkowicie zamknąć jakąś aplikację lub tylko ją schować, tak że będzie widoczna potem w tym menu z listą aktywnych aplikacji. Ta druga opcja nie działała do końca dobrze. Ostatecznie zagrała kombinacja metod
finishAffinity();
finish();
Takie rozwiązanie całkowicie zamyka aplikacje - nie widać jej potem we wspomnianym menu - to już nieaktualne. Jednak się kiełbasi. Chyba poczekam aż ktoś mądrzejszy się wypowie :P
P.S Może działam tylko na starych telefonach ale nie mam dobrego doświadczenia z automatycznym zamykaniem programów przez Androida.
Faktycznie jest to problematyczne. Nie mniej jednak udało mi się osiągnąć coś takiego:
Mam MainActivity z którego startuję Main2Activity z którego znów startuję Main3Activity. Uruchamiam je za pomocą takiego Intenta:
Intent intent = new Intent(this, Main2Activity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NO_HISTORY);
startActivity(intent);
Będąc w Main3Activity naciskam back button i pokazuje mi się pierwsze activity, a to z racji tego że jest on ustawione jako LauncherActivity. Jeśli koniecznie chcesz, aby to pierwsze activity nie odkładało się na stos to po startActivity musisz wywołać finish().
Czekaj... nie bardzo rozumiem. Może mam pewne mylne wyobrażenie o tym. Jest ta sytuacja: A->B->C. Chciałbym żeby przycisk wstecz dotknięty na A wyłączał aplikacje (pokazywał ekran startowy). Czy ta opcja jest zależna od tego w jaki sposób będe uruchamiał aktywności B i C z poziomu A? Myślałem, że to coś w stylu 'zamknij wszystko' i tyle. Coś mam chyba mętlik w głowie