【问题标题】:Android Application Lifecycle安卓应用生命周期
【发布时间】:2017-11-07 08:04:27
【问题描述】:

我看到了很多关于活动生命周期的答案,其中大部分我都很清楚。我正在寻找的是应用程序生命周期。我有以下情况:

  1. 应用程序启动 - 使 PIN 无效
  2. 如果 PIN 失效,则必须输入 PIN
  3. 应用程序在后台运行(Android 主屏幕可见)- PIN 无效
  4. 应用程序被前景化(应用程序再次可见) - 转到第 2 步

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

【问题讨论】:

标签: android xamarin.android mvvmcross android-lifecycle background-foreground


【解决方案1】:

受到 Doomsknight 向我指出的解决方案的启发,我构建了这个解决方案,但没有按照建议的答案中提出的计时器。这是我的 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;
    }

【讨论】:

  • 做得很好。您应该将其标记为正确答案。 :)
【解决方案2】:

当你的应用程序在后台(不再可见)时,调用的方法是onStop(),当应用程序在前台时,会调用onStart()然后onResume()(也可以调用onCreate()) .

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

【讨论】:

  • 这将在活动转换期间发生。又名,活动 A -> B
  • @Doomsknight:没错,这是我的问题。
  • 啊,你应该在问题中提到它
  • 这就是我提到的:“有了 Activity 生命周期,即使不是不可能也很难实现”
  • 我猜你总是可以检查一个值(例如SharedPreferences)并根据它的状态(例如布尔值)决定是否必须引入PIN
【解决方案3】:
  1. 应用程序启动 - onCreate()/ onStart()

  2. 获取onCreateonStartonResume()中的pin(检查pin的状态。

3.Application 是后台 - onPause() - 在 onPause() 方法上使您的 pin 无效

4.应用程序被前景化 - onResume() - 在 onResume() 中执行第 2 步

【讨论】:

  • 我不会使onPause() 中的 PIN 无效,因为应用程序可能部分可见,对吧?
  • 没关系,因为你要在onResume()中再次验证
  • 也许我在这里错过了重点。每个活动都会调用 OnStart() 和 OnStop()。它没有说明从后台推送/弹出应用程序的任何内容。
  • 这和 MvvmCross 有关系吗?我使用 ShowViewModel() 方法来显示一个新视图。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-08-01
  • 1970-01-01
  • 1970-01-01
  • 2012-12-29
  • 1970-01-01
  • 2016-02-18
  • 1970-01-01
相关资源
最近更新 更多