每个Activity的onPause中的登录屏幕

时间:2013-02-06 16:51:36

标签: android android-activity

我正在尝试开发一个应用程序,只要用户切换到其他应用程序或按Home键就会调用登录类。

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

  • 从Activity1调用Activity2,因此表示Activity1进入onPause状态。
  • 当用户切换到某个其他应用程序时,应该从该活动调用Login类,并且在成功进行身份验证后,它将在同一点恢复。

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

简单来说,只有当用户切换到某个其他应用程序或按Home键时才应调用Login类,而不应该在应用程序处于前台时调用。

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

4 个答案:

答案 0 :(得分:0)

在应用Application中覆盖set/resetonCreate()/onTerminate()登录首选项。

希望这会有所帮助。

答案 1 :(得分: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中实现此逻辑,并让所有其他活动继承它。

答案 2 :(得分:0)

你必须自己实施这样的事情。 Android的应用程序概念与其他平台不同;用户不与应用程序交互,而是与各个应用程序组件(活动)交互。您可以在Application子类中实现此功能,但系统可以在应用程序离开您的活动后保持应用程序(例如,按HOME)。

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

我注意到要启动,恢复,暂停或停止的活动。打开活动时,当前活动暂停,下一个打开,创建,启动和恢复(或重新启动并恢复),然后第一个停止。

答案 3 :(得分:0)

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

(1)将应用的最后状态存储到SharedPreferences onPause()和/或onStop()

(2)onResume()onRestart()使用意图将用户引导回logIn活动(或根据您的执行情况自动进行身份验证)

(3)如果验证成功,则访问存储在SharedPreferences中的最后一个状态,然后返回到用户所处的行为