2

我正在尝试开发一个应用程序,其中每当用户切换到其他应用程序或按下主页按钮时都会调用登录类。

例如,我有两个活动 Activity1 和 Activity2。

  • Activity2 是从 Activity1 调用的,因此意味着 Activity1 进入 onPause 状态。
  • 当用户切换到其他应用程序时,应从该活动调用登录类,并在成功验证后在同一点恢复。

目前,我正在每个 Activity 的 onPause 方法中为 Login 类创建一个意图。因此,当我从 Activity1 切换到 Activity2 时,正在执行 Activity1 的 onPause 方法,我无法切换到 Activity2。

简单来说,Login 类应该只在用户切换到其他应用程序或按下 Home 按钮时调用,而不是在应用程序处于前台时调用。

希望你能理解我的问题。谢谢 !

4

4 回答 4

0

你将不得不自己实现这样的事情。Android 的应用程序概念不同于其他平台;用户不与应用程序交互,而是与单个应用程序组件(活动)交互。您可以在子类中实现这一点Application,但是即使在用户离开您的活动后(例如,通过按 HOME),系统也可以保留应用程序。

我为此类问题所做的一个解决方案是创建一个带有反映活动生命周期回调的生命周期回调的单例类(可能称为 LoginManager)。然后制作一个 BaseActivity 类,它获取单例,每个生命周期回调调用单例中的相应方法。通过这种方式,您可以跟踪您的活动在其生命周期中的时间并做出相应的反应。

我观察要开始、恢复、暂停或停止的活动。当打开一个activity时,当前的一个暂停,下一个被创建、启动、恢复(或重启并恢复),然后第一个被停止。

于 2013-02-06T17:07:07.327 回答
0

使用布尔标志。

boolean movingInApp = false;
....
movingInApp = true;
Intent intent...
.....
public void onPause() {
    if(!movingInApp) {
        //Show login
    }
}

public void onResume() {
    movingInApp = false;

}

通过在启动任何意图等之前将值设置movingInApp为 true,您可以阻止您的应用显示登录屏幕。请记住稍后在您的onResume()方法中再次将其设置为 false。如果系统让你的应用程序进入后台,这将是错误的,并且会显示你的登录屏幕。

一个更好的方法是在一些 BaseActivity 中实现这个逻辑,并让你的所有其他活动继承自它。

于 2013-02-06T16:59:55.000 回答
0

在 Application 中覆盖Applicationset/reset登录首选项onCreate()/onTerminate()

希望这可以帮助。

于 2013-02-06T16:59:40.570 回答
0

我不是 100% 清楚你现在是如何实现这个的,但根据描述,听起来你想实现这个 logIn 类onResume()而不是 in onPause()。如果您尝试让用户在每次活动回到前台时进行身份验证,那么我会执行以下操作:

(1) 将应用程序的最后状态存储到 SharedPreferencesonPause()和/或onStop()

(2)onResume()onRestart()使用意图将用户引导回登录活动(或根据您的操作方式自动进行身份验证)

(3) 如果认证成功,访问SharedPreferences中存储的最后一个状态,返回用户之前的行为

于 2013-02-06T17:23:56.467 回答