2015-10-15 80 views
1

我有2個活動LoginActivity(singleTask)MainActivity(singleTop)。該應用程序的入口點是登錄活動。它檢查用戶憑證是否可用,然後開始主要活動。之後,LoginActivity調用完成。這樣我就可以防止用戶重新登錄。Android意圖重新啓動應用程序

startActivity(new Intent(getApplicationContext(), MainActivity.class)); 
finish(); 

因此,LoginActivity從背面堆棧清除。不過,我剛剛發現調用完成的缺點:

當用戶點擊一個通知我要開始LoginActivity:

Intent intent = new Intent(this, LoginActivity.class); 
mBuilder.setContentIntent(PendingIntent.getActivity(this, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT)); 

但LoginActivity不在堆棧上了(它結束了),所以android會啓動一個新的實例。所以碰巧有整個應用程序的兩個實例。歷史記錄:

(1) Login -> Main 
(2) Main -> (Click on notification) -> Login -> Main 
(3) Main -> Main -> (go back) 
(4) Main 

由於LoginActivity是我的應用程序的入口點,我無法將通知單擊發送到MainActivity。相反,我希望應用程序完全重新啓動。這可能嗎?像:

(2) Main -> (Click on notification) -> Login -> Main 
(3) Main 

回答

2

LoginActivity,登錄過程後,您正在呼叫finish()destroy該活動。

但是當用戶點擊您的MainActivity(從LoginActivity切換)創建的通知時,您將再次重定向到已登錄用戶的LoginActivity。你爲什麼不用一個單獨的活動呢?

另外,如果我是你,我會在授權過程中這樣做。

App opened -> Main -> onCreate -> isNotLoggedIn -> switchToLoginActivity 
+0

可悲的是我不能通過設計來做到這一點。 MainActivity使用TabLayout,我想保持我的應用程序模塊化並防止將登錄邏輯放入主要活動中。 –

+0

啊,我不是說把登錄邏輯放到MainActivity中。在清單中,首先啓動MainActivity,如果用戶未登錄,則重定向到LoginActivity。 – Ozgur

+0

我明白了,我會試試看,謝謝。 –

1

我認爲你需要在啓動時(1)主要,做檢查,以啓動應用程序,然後花(2)登錄。事實上,99%的人被認證,並且不會被定向到登錄。

無論您選擇何種方式(Main/Login或Login/Main),您的多個實例問題和另一個問題。你只是不顯示通知,當你的應用程序是活動的,但顯示內部消息像對話,烤麪包,小吃...

(對不起,我的英文,我是法國人)。