Android上的应用程序级别

Android上的应用程序级别,android,android-lifecycle,resume,Android,Android Lifecycle,Resume,问题 这个想法很简单。无论何时用户从最近返回到我的应用程序,我都希望显示一个简单的对话框,提示输入密码 我知道如何用密码提示对话框,但我的问题是如何理解用户最近输入了我的应用程序。如果我在每个活动的onResume中都添加了提示,那么即使用户没有从Recents菜单中输入,每次都会触发提示 我的应用程序中有很多活动和片段。因此,我希望有一个更通用或应用程序级的解决方案。您可以尝试使用此标志: 资料来源: 当“A”活动从最近开始时,此标志出现。 现在,如果“A”活动调用“B”活动并在“B”用户上按

问题

这个想法很简单。无论何时用户从最近返回到我的应用程序,我都希望显示一个简单的对话框,提示输入密码

我知道如何用密码提示对话框,但我的问题是如何理解用户最近输入了我的应用程序。如果我在每个活动的onResume中都添加了提示,那么即使用户没有从Recents菜单中输入,每次都会触发提示


我的应用程序中有很多活动和片段。因此,我希望有一个更通用或应用程序级的解决方案。

您可以尝试使用此标志:

资料来源:

当“A”活动从最近开始时,此标志出现。 现在,如果“A”活动调用“B”活动并在“B”用户上按back,则此标志也将出现。
因此,您必须检查标志,当您检测到它时,通过删除此标志,您有明确的意图,来源:

请尝试下面的示例

    /**
 * TODO : After update to API level 14 (Android 4.0),
 * We should implement Application.ActivityLifecycleCallbacks
 */
public class GlobalApplication extends android.app.Application
{
    private boolean inForeground = true;
    private int resumed = 0;
    private int paused = 0;

    public void onActivityResumed( Activity activity )
    {
        ++resumed;

        if( !inForeground )
        {
            // Don't check for foreground or background right away
            // finishing an activity and starting a new one will trigger to many
            // foreground <---> background switches
            //
            // In half a second call foregroundOrBackground
        }
    }

    public void onActivityPaused( Activity activity )
    {
        ++paused;

        if( inForeground )
        {
            // Don't check for foreground or background right away
            // finishing an activity and starting a new one will trigger to many
            // foreground <---> background switches
            //
            // In half a second call foregroundOrBackground
        }
    }

    public void foregroundOrBackground()
    {
        if( paused >= resumed && inForeground )
        {
            inForeground = false;
        }
        else if( resumed > paused && !inForeground )
        {
            inForeground = true;
        }
    }
}

实现Application.ActivityLifecycleCallbacks,它将提供应用程序类中的所有活动回调


我建议使用LifecycleObserver。如果您的应用程序类实现了此接口,则它会将类标记为LifecycleObserver,它没有任何方法,而是仅依赖于LifecycleEvent注释的方法。用法很简单:

public class AndroidApplication extends Application implements LifecycleObserver {

    @OnLifecycleEvent(Lifecycle.Event.ON_START)
    public void onAppStart() {
         //enter code here
    }

    @OnLifecycleEvent(Lifecycle.Event.ON_STOP)
    public void onAppStop() {
         //enter code here
    }

    ...etc
}

使用Lifecycle.Event,您可以通过枚举访问所有生命周期状态。它是androidx的一部分。

实现该活动的onResume方法。@GopalingSirvi正如我之前所说的,如果我这样做,即使用户最近没有输入,每次都会触发它。这太完美了。不幸的是,我不记得这个简单的回调。非常感谢。我刚刚检查了一下,这并不能解决我的问题。如果我从一个活动移动到另一个活动并返回,那么onRestart也会被触发。我需要一种方法来提示密码,只有当它从最近恢复时才提示。@Aritra我添加了另一个密码solution@LaurentY我已将您的新代码放在onResume()中,但它根本不起作用。我最近尝试过访问我的应用程序,但这种情况从来都不是真的。@LaurentY您好,我可以得到其他解决方案或修改后的解决方案吗?我真的需要这个。我会试试这个,然后告诉你。在onCreate()中,你必须添加registerActivityLifecycleCallbacks(这个);是否为所有活动的生命周期更改调用了这些方法?是。这些是为所有活动调用的。它不适用于具有隐式意图(例如
新意图(设置。*)
)的活动。您将此观察者附加到何处?它是如何触发的?我认为它不会比示例中显示的更简单。实现LifecycleObserver,如图所示使用它(这就是连接它的方式)。它是如何触发的?其实你不在乎,你不是触发它的人,操作系统和应用程序状态才是触发它的人。
  public class BaseActivity extends android.app.Activity
{
    private GlobalApplication globalApplication;

    @Override
    protected void onCreate()
    {
        globalApplication = (GlobalApplication) getApplication();
    }

    @Override
    protected void onResume()
    {
        super.onResume();
        globalApplication.onActivityResumed(this);
    }

    @Override
    protected void onPause()
    {
        super.onPause();
        globalApplication.onActivityPaused(this);
    }

    @Override
    public void onDestroy()
    {
        super.onDestroy();
    }
}
public class AppController extends Application implements  
Application.ActivityLifecycleCallbacks  
{   
    @Override
    public void onCreate() {
        super.onCreate();
        registerActivityLifecycleCallbacks(this);

    }


    @Override
    public void onActivityCreated(Activity activity, Bundle bundle) {

    }

    @Override
    public void onActivityStarted(Activity activity) {

    }

    @Override
    public void onActivityResumed(Activity activity) {

    }

    @Override
    public void onActivityPaused(Activity activity) {

    }

    @Override
    public void onActivityStopped(Activity activity) {

    }

    @Override
    public void onActivitySaveInstanceState(Activity activity, Bundle bundle) {

    }

    @Override
    public void onActivityDestroyed(Activity activity) {

    }
}
public class AndroidApplication extends Application implements LifecycleObserver {

    @OnLifecycleEvent(Lifecycle.Event.ON_START)
    public void onAppStart() {
         //enter code here
    }

    @OnLifecycleEvent(Lifecycle.Event.ON_STOP)
    public void onAppStop() {
         //enter code here
    }

    ...etc
}