2013-03-22 18 views
56

Próbuję utworzyć funkcję "wyloguj" w mojej aplikacji. Zasadniczo, wylogowując się, dane aplikacji powinny zostać wyczyszczone. To, co chciałbym zrobić, to po wylogowaniu aplikacja powinna się zrestartować, aby ponownie wprowadzić dane uwierzytelniające. Problem polega na tym, że w momencie, gdy użytkownik kliknie "wyloguj", aplikacja ma już uruchomione 3-4 działania i nie jestem pewien, jak z nich zrezygnować. Jak mogę (symulować?) Ponowne uruchomienie aplikacji?Jak programowo "ponownie" uruchomić aplikację Android

+1

jak można zapisać dane aplikacji ? –

+0

W lokalnym DB, a także pliki JSON. Udało mi się jak dotąd wyczyścić dane pomyślnie – Ryan

+0

Sprawdź te pytania/odpowiedzi http://stackoverflow.com/questions/2470870/force-application-to-restart-on-first-activity-android – Zelldon

Odpowiedz

154

wypróbować poniższe linie do ponownego uruchomienia aplikacji

Intent i = getBaseContext().getPackageManager() 
      .getLaunchIntentForPackage(getBaseContext().getPackageName()); 
i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
startActivity(i); 
+1

Wygląda na to, że zadziałało, wykonam jeszcze kilka testów i potwierdzę. – Ryan

+1

Aktywacja strony logowania powinna już znajdować się w stosie, aby to działało. Będzie działać tylko wtedy, gdy użytkownik otworzy stronę logowania, otworzy kilka czynności i kliknie przycisk wylogowania. Ale po zalogowaniu użytkownik nie otwiera strony logowania i nie będzie w stosie. Więc to nie zadziała – Sathesh

+37

O ile wiem, spowoduje to ponowne uruchomienie aplikacji od początku, ale ** nie ** ponownie zainicjuje aplikacji. W ten sposób statyczne zmienne klasowe i podobne zachowają swoją wartość z poprzedniego przebiegu. Pełny restart wymaga najpierw aplikacji do "System.exit (0)". http://stackoverflow.com/questions/6609414/howto-programatically-restart-android-app –

26

Zamówienie intent właściwości jak bez historii, jasne powrotem sterta etc ... Intent.setFlags

Intent mStartActivity = new Intent(HomeActivity.this, SplashScreen.class); 
int mPendingIntentId = 123456; 
PendingIntent mPendingIntent = PendingIntent.getActivity(HomeActivity.this, mPendingIntentId, mStartActivity, 
PendingIntent.FLAG_CANCEL_CURRENT); 
AlarmManager mgr = (AlarmManager) HomeActivity.this.getSystemService(Context.ALARM_SERVICE); 
mgr.set(AlarmManager.RTC, System.currentTimeMillis() + 100, mPendingIntent); 
System.exit(0); 
+0

Rozwiązanie robocze –

+0

Czy ten sam kod będzie działał również dla Nougat? – Tejas

Powiązane problemy