如果我在我的应用程序中导航并使用HomeButton返回Android LaunchScreen,则会调用OnSpt()挂钩,这很好。如果我使用Android TaskManager导航回应用程序,则会调用OnResume()。如果我使用Hardware BackButton在我的应用程序中导航,那么也会调用OnSpt(),这很好,但如果我导航回我的应用程序,则会调用Mainactive中的OnCreate方法,从而重新创建应用程序。
global::Xamarin.Forms.Forms.Init (this, bundle);
DisplayCrashReport();
LoadApplication (new Gtue.Mobile.App ());
这不应该发生。在App.xaml的ctor中,我初始化了只需要初始化一次的东西。我试了每一种启动方式,都没用。
有没有办法找出应用程序是否已经初始化?
我在观察App.xaml时遇到了这个问题。当我按下Android设备上的主页按钮,然后单击我的应用程序时,cs构造器被调用。
上面详细的回答详细说明了正确的“预期行为”,但我的情况并非如此。
当我使用home键或者back键的时候,我得到了这种感觉
**On Debug Start**
MainActivity:OnCreate
XF:AppCtor
XF:OnStart
MainActivity:OnResume
**Press Home Button**
MainActivity:OnPause
XF:OnSleep
**Launch App via Click on App Icon**
MainActivity:OnCreate
XF:AppCtor
搜寻最终让我找到了-
应用重启而不是继续
这反过来又导致以下 Xamarin 代码位于主活动创建的顶部 -
if (!IsTaskRoot)
{
string action = Intent.Action;
if (Intent.HasCategory(Android.Content.Intent.CategoryLauncher) &&
!string.IsNullOrEmpty(Intent.Action) &&
action == Android.Content.Intent.ActionMain)
{
Finish();
return;
}
}
这似乎至少解决了最初的重装问题。
我还将其与 -
LaunchMode = LaunchMode.SingleTask
当点击通知屏幕中的通知时,停止一些双重活动诡计。
您的< code>App类从< code>Xamarin扩展而来。Forms.Application和< code>Xamarin。Forms.Application生命周期与< code>Activity生命周期绑定在一起。您可以在源代码中找到它:
async Task OnStateChanged()
{
if (_application == null)
return;
if (_previousState == AndroidApplicationLifecycleState.OnCreate && _currentState == AndroidApplicationLifecycleState.OnStart)
_application.SendStart();
else if (_previousState == AndroidApplicationLifecycleState.OnStop && _currentState == AndroidApplicationLifecycleState.OnRestart)
_application.SendResume();
else if (_previousState == AndroidApplicationLifecycleState.OnPause && _currentState == AndroidApplicationLifecycleState.OnStop)
await _application.SendSleepAsync();
}
因此,您只需要关心活动的
生命周期即可。当您触摸 HomeButton 时,
应用程序不会从任务堆栈中删除 MainActivity
,当您重新进入应用程序时,MainActivity
将可用,因此它没有执行 OnCreate
方法。
当您触摸主页按钮时
:
[0:] MainActivity OnPause
[0:] MainActivity OnStop
[0:] Forms App OnSleep
当您使用Android<code>TaskManager<code>打开应用程序时:
[0:] MainActivity OnRestart
[0:] Forms App OnResume
[0:] MainActivity OnResume
但是,当您触摸硬件后退按钮
时,MainActivity将从
任务的堆栈中删除:
[0:] MainActivity OnPause
[0:] MainActivity OnStop
[0:] Forms App OnSleep
[0:] MainActivity OnDestroy
当< code>MainActivity被销毁时,您的应用程序将释放资源,包括您的< code>Gtue。Mobile.App实例。你可以看到OnDestroy()方法的源代码:
protected override void OnDestroy()
{
PopupManager.Unsubscribe(this);
_platform?.Dispose();
// call at the end to avoid race conditions with Platform dispose
base.OnDestroy();
}
因此,下次打开应用程序时,必须重新创建 App
类。实际上,该应用程序
只初始化了一次。
我使用带有ViewPager的FragmentPagerAdapter来切换片段 那么我如何使片段调用它们的onResume()呢?
我的主要活动是装载不同的碎片。此外,可以从MainActivity打开设置-activity。 如果用户只是在片段之间切换,那就万事大吉了。 当打开设置-activity并返回MainActivity时,onResume和onPause会被调用两次。如果用户打开设置-activity并再次返回MainActivity,onResume和onPause将被调用三次。每次用户打开“设置-activit
假设有两个Fragments,X和Y。我在X上添加Y片段。当Y完成它的工作,然后删除,X再次可见。 问题:当Y片段被删除并且X再次可见时,我必须执行一些任务,但不会调用,因为它取决于活动。那么我怎么知道片段是可见的呢?
我在一个activity里有多个碎片。在一个按钮点击我开始一个新的片断,将它添加到backstack。我自然希望调用当前片段的方法和新片段的。但这并没有发生。 我所期待的是, 单击按钮时,LoginFragment将被替换为HomeFragment、LoginFragment的以及HomeFragment的将被调用 按下“上一步”时,将弹出HomeFragment并看到LoginFragment,
我正在使用开发一个应用程序。 这是我的活动: 我使用的FragmentStatePagerAdapter如下所示: }
在我的应用程序中,其中一个活动有两个。我从建议列表中选择它们的值,然后按 OK 按钮。“确定”按钮为我带来了一个新活动,用于显示“自动完成”文本视图值的结果基础。但是,如果我现在按下后退按钮并返回到具有两个自动完成TextView文本视图的活动,它们都开始显示建议列表。我希望他们不要显示建议列表,因为建议列表只包含文本视图中已有的单个项目。我试图设置适配器空值,然后设置回原始数组,但这并不能阻止自