Android应用程序生命周期

Android应用程序生命周期,android,xamarin.android,mvvmcross,android-lifecycle,background-foreground,Android,Xamarin.android,Mvvmcross,Android Lifecycle,Background Foreground,我看到了很多关于活动生命周期的答案,这在很大程度上对我来说是清楚的。我要寻找的是应用程序生命周期。我有以下情况: 应用程序启动-使PIN无效 如果PIN无效,则必须输入PIN 应用程序是背景的(Android主屏幕可见)-无效PIN 应用程序前景化(应用程序再次可见)-转到步骤2 在活动生命周期中,即使不是不可能,也很难实现。有什么建议吗?当应用程序处于后台(不再可见)时,调用的方法是onStop(),当应用程序处于前台时,将调用onStart(),然后调用onResume()(onCreate

我看到了很多关于活动生命周期的答案,这在很大程度上对我来说是清楚的。我要寻找的是应用程序生命周期。我有以下情况:

  • 应用程序启动-使PIN无效
  • 如果PIN无效,则必须输入PIN
  • 应用程序是背景的(Android主屏幕可见)-无效PIN
  • 应用程序前景化(应用程序再次可见)-转到步骤2

  • 在活动生命周期中,即使不是不可能,也很难实现。有什么建议吗?

    当应用程序处于后台(不再可见)时,调用的方法是
    onStop()
    ,当应用程序处于前台时,将调用
    onStart()
    ,然后调用
    onResume()
    onCreate()

    问题是,您应该做的是在
    onStop()
    中使PIN无效,然后在
    onResume()中请求PIN。这将始终使您的应用程序要求PIN:应用程序第一次启动时以及在后台启动时

  • 应用程序启动-
    onCreate()
    /
    onStart()

  • onCreate
    onStart
    onResume()中获取pin(检查pin的状态)

  • 3.应用程序是后台的-
    onPause()
    -在onPause()方法上使pin无效


    4.应用程序是基于前景的-
    onResume()
    -执行onResume()中的步骤2

    受杜姆斯奈特向我指出的解决方案的启发,我构建了这个解决方案,没有建议答案中提出的计时器。以下是我的mainapplication.cs中的代码:

        public void OnActivityPaused(Activity activity)
        {
            _lastActivity = DateTime.Now;
        }
    
        public void OnActivityResumed(Activity activity)
        {
            CrossCurrentActivity.Current.Activity = activity;
    
            DateTime now = DateTime.Now;
            TimeSpan span = now - _lastActivity;
    
            if (span.TotalMilliseconds > 2000)
            {
                Notifier.Classes.Settings.IsPinValid = false;
            }
    
            _lastActivity = now;
        }
    

    当你指的是背景时,你的意思是应用程序不再可见,对吗?对,这就是我的意思,很难理解你到底在寻找什么,但我建议看看Android服务:你不了解哪一部分。描述不够清楚吗?很抱歉。看看这个问答。特别是最上等的答案。(不是可接受的)这将在活动转换期间发生。又名,活动A->B@Doomsknight:没错,这是我的问题。啊,你应该在问题中提到这一点,这就是我提到的:“在活动生命周期中,如果不是不可能实现的话,那么很难实现”我想你可以随时检查一个值(例如
    SharedReferences
    )并根据其状态(例如布尔值)决定是否必须引入PIN。我不会在
    onPause()
    中使PIN无效,因为应用程序可能部分可见,对吧?这不重要,因为您将在onResume()中再次验证可能我没有抓住要点。每个活动都会调用OnStart()和OnStop()。它没有说明从后台推/弹出应用程序。这可能与MvvmCross有关吗?我使用ShowViewModel()方法来显示新视图。做得很好。您应该将其标记为正确答案。:)