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
在活动生命周期中,即使不是不可能,也很难实现。有什么建议吗?当应用程序处于后台(不再可见)时,调用的方法是
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()方法来显示新视图。做得很好。您应该将其标记为正确答案。:)