Application endgültig schließen

M

Madlip

Gast
Hallo Community,

ich frage mich gerade ob man die Application "komplett" schließen kann.

Kurz zum Problem, ich hab eine App in der man sich zu beginn anmelden muss/kann. Wenn man sich da nun eine weile durch navigiert etc und sich dann der User entscheidet sich abzumelden, möchte ich gern den ganzen Activity Socket schließen.

Bis jetzt ist es so das ich wenn der Benutzer auf abmelden drückt ich die aktuelle Activity mit "finish()" beende und der Benutzer zurück zum Anmelde Screen kommt, nur da ist das Problem wenn er auf den Back Button drückt er auf die Activity zuvor kommt: Hier ein Bsp was ich meine.

"App start" -> StartActivity -> LoginActivity -> AppÜbersichtActivity -> Bearbeitung -> "Abmelden" -> StartActivity "Zurück Button" -> AppÜbersichtActivity

und genau das möchte ich gern verhindert das es quasi kein zurück Möglichkeit dort gibt.

Habt ihr Anregungen/Ideen?

Gruß
Mad
 
ich würde dann einfach die loginactivity(oder startactivity) mit einem entsprechenden intent extra starten.

dann passiert genau das nicht mehr
 
  • Danke
Reaktionen: Madlip
Was swordi bereits beschreibt erreichst du indem die Activity mit einem sogenannten
Intentflag gestartet wird.


Code:
	Intent intent = new Intent(this, AppÜbersichtActivity.class);   	// Intent nicht auf den History Stack packen 	intent.setFlags(Intent.FLAG_ACTIVITY_NO_HISTORY); 	startActivity(intent);
 
  • Danke
Reaktionen: GENiALi und Madlip
Dachte da eher an clear_task

Gesendet von meinem Galaxy Nexus mit der Android-Hilfe.de App
 
er will ja aber die erste Activity behalten und nur das Login vergessen machen. Cleartask killt ja alle activities vom stack. Ein weiterer Punkt zum beachten: cleartask benötigt Api11.



Gesendet von meinem Nexus 7 mit Tapatalk 2
 
  • Danke
Reaktionen: Madlip
ich werde mir den vorschlag von killphil anschauen ...

also kleinen workaround hatte ich gestern noch die onBackPressed Methode überschrieben ... weil in der LoginActivity benötige ich diesen Button nicht wirklich ...
 
das ist aber nicht sonderlich schön.

back ist back - wenn der user das klickt, möchte er zurück kommen.
 
swordi schrieb:
das ist aber nicht sonderlich schön.

back ist back - wenn der user das klickt, möchte er zurück kommen.

deswegen schau ich mir eure vorschläge ja noch an, ich weiß was du meinst, das war auch nur ein sehr sehr dirtyfix :D
 
swordi schrieb:
das ist aber nicht sonderlich schön.

back ist back - wenn der user das klickt, möchte er zurück kommen.

Die Frage ist, wie an dieser Stelle die Erwartungshaltung ist. Wenn ich mich abmelde und wieder beim Login Screen lande, dann erwarte ich, dass ein back mich aus der App befördert und nicht einen Screen lädt der eigentlich nur angemeldet zu sehen ist.

Prinzipiell stimme ich zu, dass man nicht unüberlegt den back button überschreiben sollte. Aber dennoch kann es in manchen Fällen Sinn machen. Man sollte da nicht zu dogmatisch mit solchen Sachen sein und situationsbedingt denken.

eidt: die AppÜbersichtActivity mit NO_HISTORY zu starten sehe ich als nicht ideal an, weil ich dann auch eingeloggt keinen funktionierenden back Button mehr habe.
 
Eine ähnliche Problematik hab ich bei meiner PasswordSafe-App auch. Deshalb hab ich BroadcastReceiver eingesetzt, um sicherzustellen, dass keine Activity mehr irgendwo aktiv ist bzw. um ein finish jeder Activity zu forcieren. Funktioniert sehr gut und ist in meinen Augen sehr sauber.

D.h. ich melde bei jeder Activity, wenn diese erstellt wird, ein BroadcastReceiver an. Wenn dieser Broadcast gesendet wird, wird bei allen Empfängern (also alle nicht beendete Activities) ein finish() ausgeführt, was zum kompletten beenden der App führt (wenn man dies bei allen Activities einführt).

Das sieht bei mir in etwa so aus:
PHP:
    private BroadcastReceiver brLogout = new BroadcastReceiver(){
        @Override
        public void onReceive(Context context, Intent intent) {
            finish();
        }
    };
    
    @Override
    protected void onDestroy() {
        unregisterReceiver(brLogout);
        super.onDestroy();
    }
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        IntentFilter intentFilter = new IntentFilter();
        intentFilter.addAction("de.beispiel.blabla.LOGOUT");
        registerReceiver(brLogout, intentFilter);
    }
Um den Broadcast zu senden, kannst du folgendes ausführen:

PHP:
        Intent broadcastIntent = new Intent();
        broadcastIntent.setAction("de.beispiel.blabla.LOGOUT");
        ctx.sendBroadcast(broadcastIntent);
 
  • Danke
Reaktionen: deek

Ähnliche Themen

S
  • SlayNox
Antworten
0
Aufrufe
676
SlayNox
S
S
Antworten
2
Aufrufe
974
stikker
S
Zurück
Oben Unten