【问题标题】:Android intent to restart appAndroid意图重新启动应用程序
【发布时间】:2015-10-15 15:51:32
【问题描述】:

我有 2 个活动 LoginActivity (singleTask)MainActivity (singleTop)。应用程序的入口点是登录活动。它检查用户凭据是否可用,然后启动主要活动。之后, LoginActivity 调用完成。这样我就可以防止用户返回登录。

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

【问题讨论】:

    标签: android android-intent


    【解决方案1】:

    LoginActivity 中,在登录过程之后,您正在调用finish()destroy 那个活动。

    但是当用户点击从您的MainActivity(从LoginActivity 切换)创建的通知时,您将再次重定向到已登录用户的LoginActivity。你为什么不使用一个单独的活动呢?

    另外,如果我是你,我会在授权过程中这样做。

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

    【讨论】:

    • 遗憾的是我不能按设计做到这一点。 MainActivity 正在使用 TabLayout,我想保持我的应用程序模块化并防止将登录逻辑放入主要活动中。
    • 啊,我不是说把登录逻辑放到 MainActivity。在清单中,首先启动 MainActivity,如果用户未登录,则重定向到 LoginActivity。
    【解决方案2】:

    我认为您需要在 (1)Main 中启动您的应用程序,在启动时进行检查,然后使用 (2)Login。事实上,99% 的人都经过身份验证,不会被定向到登录。

    您的多实例问题和另一个问题,无论您的选择如何(主/登录或登录/主)。您只是在应用程序处于活动状态时不显示通知,而是显示内部消息,例如 Dialog、Toast、Snack...

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多