首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用MvvmCross构建的Xamarin Android应用程序在3-4天后从后台恢复时,就会卡在屏幕上。

使用MvvmCross构建的Xamarin Android应用程序在3-4天后从后台恢复时,就会卡在屏幕上。
EN

Stack Overflow用户
提问于 2018-10-02 15:06:12
回答 2查看 990关注 0票数 1

我正在从事一个使用MvvmCross 3.5.1版本的Xamarin项目。我正面临一个问题,我们认为可能是因为MvvmCross设置失败。App基本上适用于安卓和iOS两种平台。但是,我正面临一个专门针对Android的问题。App很老,从过去的3-4年开始开发,从未升级到最新发布的MvvmCross版本。更新MvvmCross是我的最后一个选择。但在此之前,我想通过了解这个问题的根源和再现它的方法来解决这个问题。

场景:

1)应用程序安装在Android设备上,完成登录。

2)应用程序移到后台。

3) 3~4天后,应用程序继续运行,点击app启动图标并粘在飞溅屏幕上。

4)应用程序重新开始工作时

代码语言:javascript
复制
force stop from phone setting

我无法复制这个问题,除非把它放在背景超过3-4天。请您建议一些方法,以了解根本原因和步骤,以复制这个问题,而不把应用程序的背景超过4天。

下面的日志打印从MvvmCross和应用程序冻结在飞溅屏幕上。log语句以粗体“无视图模型类型查找器可用-假设我们正在寻找一个启动屏幕-返回空”打印3-4次,然后应用程序卡在启动屏幕上。即使应用程序停留在飞溅屏幕上。推送通知由应用程序接收。

安装程序: PlatformServices启动“

安装程序: MvvmCross设置启动“

安装程序:单点缓存启动“

"mvx":“没有可用的视图模型类型查找器-假设我们正在寻找一个启动屏幕-返回空”

"mvx":“没有可用的视图模型类型查找器-假设我们正在寻找一个启动屏幕-返回空”

"mvx":“没有可用的视图模型类型查找器-假设我们正在寻找一个启动屏幕-返回空”

请帮助我知道为什么上面的粗体日志语句被打印了3-4次,为什么_setup.InitializeSecondary()的日志没有被打印出来,然后应用程序就开始运行了。看起来,由于某些死锁或争用条件,安装程序挂在中间。如果你有任何建议去了解可能的问题,了解根本原因,以及重现这个问题的方法,这将对我很有帮助。提前谢谢。

MvxAndroidSetupSingleton->InitializeFromSplashScreen()更新:更新:我们可以通过在Splash屏幕上注释来自和应用程序的InitializeSecondary()调用来复制这个场景。请建议修复这个从应用程序级代码卡住的启动屏幕。基本上,我们不想修改MvvmCross代码,而是希望从应用程序代码中修复。谢谢你的帮助。根据日志,不执行来自MvxAndroidSetupSingleton.cs的下面方法中的一行代码MvxAndroidSetupSingleton.cs。这个问题是被复制后,保持申请在背景超过4-5天。首先,我想知道为什么在这个特殊的情况下会发生这种情况,然后解决这个问题。提前感谢

备注:在我的应用程序中使用Android前台服务

公开虚虚InitializeFromSplashScreen(IMvxAndroidSplashScreenActivity splashScreen) { lock (LockObject) { _currentSplashScreen = splashScreen;

代码语言:javascript
复制
            if (_initializationStarted)
            {
                if (_initialized)
                {
                    _currentSplashScreen.InitializationComplete();
                    return;
                }

                return;
            }

            _initializationStarted = true;
        }

        _setup.InitializePrimary();

        ThreadPool.QueueUserWorkItem(ignored =>
        {
            _setup.InitializeSecondary();

            lock (LockObject)
            {
                _initialized = true;
                if (_currentSplashScreen != null)
                    _currentSplashScreen.InitializationComplete();
            }
        });
    }
EN

回答 2

Stack Overflow用户

发布于 2018-10-03 06:32:33

我们已经对MvvmCross的应用程序启动做了很多改进。所以很有可能你的问题已经用一个更新的版本解决了。

虽然,由于它说的是“没有视图模型类型的过滤器可用”,这可能意味着启动过程还没有完成或被困在做某事,无法找到下一个ViewModel,它想继续。

票数 2
EN

Stack Overflow用户

发布于 2018-10-03 08:11:42

Android将记忆清除一个应用程序,如果它是长在后台,或未使用。这意味着mvvm框架在内存中丢失了与IOC容器相同的所有引用。通常,mvvm框架应该能够处理这个问题,但在我的经验中,有时您必须手动推动它。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52611174

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档