如何在android中使用onResume活动

时间:2013-03-14 12:02:50

标签: android android-activity

我正在尝试构建一个应用程序,其中我在应用程序上应用密码。当用户离开应用程序并再次打开时,我会要求输入密码。例如,应用程序正在运行,用户单击主页按钮意味着离开应用程序,然后他再次打开它,应用程序将要求输入密码。

我正在onResume()活动方法中创建密码对话框。但问题是如果用户进入下一个屏幕并返回到该屏幕,那么onResume()也会执行并要求输入密码。但我不想要这个。我希望密码警报只有在他离开应用程序并再次出现时才会发生。请告诉我任何解决方案,我应该在哪里编写该代码。

5 个答案:

答案 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();