我正在尝试构建一个应用程序,其中我在应用程序上应用密码。当用户离开应用程序并再次打开时,我会要求输入密码。例如,应用程序正在运行,用户单击主页按钮意味着离开应用程序,然后他再次打开它,应用程序将要求输入密码。
我正在onResume()
活动方法中创建密码对话框。但问题是如果用户进入下一个屏幕并返回到该屏幕,那么onResume()
也会执行并要求输入密码。但我不想要这个。我希望密码警报只有在他离开应用程序并再次出现时才会发生。请告诉我任何解决方案,我应该在哪里编写该代码。
答案 0 :(得分:1)
试一试。
假设你有A,B活动,在A中创建一个静态变量为loggedIn = false;
现在假设你从A开始B,在B onbackpress方法总是使loggedIn = true;
在活动A的简历方法检查
如果(!的loggedIn){ showLogin对话框 } 然后再分配真实 的loggedIn = TRUE;
现在如果用户按下主页按钮loggedIn标志将为false,当恢复应用程序时,将调用登录对话框。
答案 1 :(得分:0)
假设您有两个活动(显示对话框)和b。当您从一个活动a导航到另一个活动时b。活动a转到后台。活动b在前景中。两者都被用于活动后台。后栈就像LIFO(后进先出)。单击后退按钮时。活动b从后台堆栈推出,显示活动a。当活动暂停时,它必须恢复。当您的活动停止onStart()被调用并且在成功时调用onResume()。所以,如果你在onResume()中调用对话框,它将会显示出来。
请查看以下链接。
http://developer.android.com/training/basics/activity-lifecycle/index.html
http://developer.android.com/guide/components/tasks-and-back-stack.html。
注意从以上链接引用:可以在后台同时保存多个任务。但是,如果用户同时运行许多后台任务,系统可能会开始销毁后台活动以恢复内存,从而导致活动状态丢失。请参阅以下有关活动状态的部分。
修改
您必须实现onCreate()方法来执行基本应用程序启动逻辑,该逻辑应该在活动的整个生命周期中仅发生一次。因此onCreate()中的显示对话框不是onResume()。除非活动被销毁,否则不会再次创建。
答案 2 :(得分:0)
您可以创建一个活动来处理身份验证过程,然后调用它(A)。 让你目前的活动是(B)和(C)。 所以,就是这样:
1-活动(A)是发射器。
2-将android:noHistory="true"
添加到manifest.xml中活动(A)的<activity>
标记
3-(A)你可以导航到(B)然后导航到(C)。
4-(C)你可以导航回(B)但你将无法导航回(A)。
答案 3 :(得分:0)
您可以在按下主页键时设置变量
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if(keyCode == KeyEvent.KEYCODE_HOME)
{
fromHome = true;
}
return false;
};
并在您从此活动导航时设置变量false
fromHome = false;
并检查OnResume()
答案 4 :(得分:0)
在我看来,您实际上想要跟踪的是您的应用程序中“已启动”活动的数量:#(已启动的活动)&gt; 0表示您的应用程序尚未被置于后台,因为如果用户按下Home,则所有应用程序的活动都必须调用onStop()。
为了跟踪“已开始”活动的数量,您可以引入一个单身,如下所示:
public class LifecycleTracker {
private LifecycleTracker mInstance;
private int mNrOfStarted;
private LifecycleTracker() {
mNrOfStarted = 0;
}
public static LifecycleTracker getInstance() {
if (mInstance == null) {
mInstance = new LifecycleTracker();
}
return mInstance;
}
public void incrementStarted() {
mNrOfStarted++;
}
public void decrementStarted() {
mNrOfStarted--;
}
public boolean fromBackground() {
return mNrOfStarted == 0;
}
}
然后,在你所有的Activity的onStart()方法中,你应首先检查你是否来自后台:
if (LifecycleTracker.getInstance().fromBackground()) {
//start authentication
//don't forget to increment after authentication as well!
} else {
LifecycleTracker.getInstance().incrementStarted();
}
在所有Activity的onStop()方法中,你应该减少:
LifecycleTracker.getInstance()decrementStarted();