2015-10-15 82 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),您的多个实例问题和另一个问题。你只是不显示通知,当你的应用程序是活动的,但显示内部消息像对话,烤面包,小吃...

(对不起,我的英文,我是法国人)。