Android, problemy z onBackPressed()

0

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.

0

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:).

0

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.

0

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().

0

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

1 użytkowników online, w tym zalogowanych: 0, gości: 1