安卓应用程序生命周期

4
我看到了很多与Activity生命周期相关的答案,这对我来说大部分是清楚的。但我所需要的是Application生命周期。我有以下情况:
  1. 应用程序启动 - 使PIN失效
  2. 如果PIN过期或无效,则必须输入PIN。
  3. 应用程序在后台运行(Android主屏幕可见)- 使PIN失效
  4. 应用程序回到前台(应用程序再次可见)- 转到步骤2
使用Activity Lifecycle,实现这一点可能很难,甚至不可能。有什么建议吗?

你不理解哪一部分?是描述不够清晰吗? - Paul Sinnema
1
抱歉,看看这个问答。特别是最受赞同的答案。(不是被采纳的那个) https://dev59.com/OG855IYBdhLWcg3wUSgW#15573121 - IAmGroot
问题在于对于每个活动的启动和停止,活动代码都会被反复调用。只要应用程序处于活动状态,就没有必要输入新的 PIN,但当应用被推到后台并稍后恢复时,出于安全原因,我希望用户再次输入 PIN。 - Paul Sinnema
啊,我应该提到我正在使用C#和Visual Studio的Xamarin。 - Paul Sinnema
应用程序本身没有太多的生命周期。它被创建然后被销毁。您需要监视所有活动,以确定它们中的一个在给定时间是否可见。您可以使它们都继承自基础活动,以使其更容易。 - BladeCoder
显示剩余5条评论
3个回答

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;
    }

做得很好。你应该将其标记为正确答案。 :) - IAmGroot

0

当您的应用程序被置于后台(不再可见)时,将调用名为onStop()的方法,而当应用程序处于前台时,将调用onStart(),然后调用onResume()(也可能会调用onCreate())。

问题是,在onStop()中应该使PIN无效,并在onResume()中请求PIN。这将始终使您的应用程序要求输入PIN:第一次启动应用程序以及每当它被置于后台时。


1
这将发生在活动转换期间。也就是说,从Activity A到B。 - IAmGroot
@Doomsknight:确切地说,那就是我的问题。 - Paul Sinnema
啊,那你应该在问题中提到它。 - Ezio
这就是我所提到的:“使用Activity生命周期很难,如果不是不可能的话。” - Paul Sinnema
我猜你可以始终检查一个值(例如SharedPreferences),并根据其状态(例如布尔值)决定是否需要引入PIN。 - horro

0
  1. 应用程序启动 - onCreate()/ onStart()

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

3.应用程序进入后台 - onPause() - 在onPause()方法中使您的pin无效。

4.应用程序进入前台 - onResume() - 在onResume()中执行步骤2。


我不会在 onPause() 中使 PIN 失效,因为应用程序可能部分可见,对吧? - horro
1
无所谓,因为您将在onResume()中再次进行验证。 - Ezio
也许我在这里错过了重点。OnStart()和OnStop()会为每个活动调用。它没有说明应用程序是否从后台推送/弹出。 - Paul Sinnema
这与MvvmCross有关吗?我使用ShowViewModel()方法来显示一个新视图。 - Paul Sinnema

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接