我有2项活动 LoginActivity(singleTask)和 MainActivity(singleTop)。应用程序的入口点是登录活动。它检查用户凭据是否可用,然后启动主要活动。之后,LoginActivity调用完成。这样我就可以阻止用户返回登录。
startActivity(new Intent(getApplicationContext(), MainActivity.class));
finish();
因此从后台堆栈中清除了LoginActivity。但是我刚刚发现了调用finish的缺点:
当用户点击通知时,我想启动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
答案 0 :(得分:2)
在LoginActivity
中,在登录过程之后,您正在呼叫finish()
到destroy
该活动。
但是,当用户点击通过您的MainActivity
(从LoginActivity
切换)创建的通知时,您将再次重定向到已登录用户的LoginActivity
。为什么不为它使用单独的活动?
另外,如果我是你,我会在授权过程中这样做。
App opened -> Main -> onCreate -> isNotLoggedIn -> switchToLoginActivity
答案 1 :(得分:1)
我认为你需要在(1)Main 中启动你的应用程序,在启动时进行检查,然后花费(2)登录。实际上,99%的人都经过身份验证,不会被定向登录。
您的多实例问题和其他问题,无论您选择哪种(主要/登录或登录/主要)。您只是在应用程序处于活动状态时不显示通知,但显示内部消息,如Dialog,Toast,Snack ......
(抱歉我的英文,我是法国人)。