Приложение Xamarin для Android, созданное с использованием MvvmCross, застряло на заставке при выходе из фона через 3-4 дня - PullRequest
0 голосов
/ 02 октября 2018

Я работаю над одним проектом Android Xamarin, который использует MvvmCross версии 3.5.1.Я столкнулся с одной проблемой, которая, по нашему мнению, могла быть связана с ошибкой установки MvvmCross.Приложение в основном для платформ Android и iOS.Но я столкнулся с проблемой специально для Android.Приложение довольно старое и находится в разработке за последние 3-4 года и никогда не обновлялось до последних выпущенных версий MvvmCross.Обновление MvvmCross - последний вариант для меня.Но перед этим я хочу решить эту проблему, зная, что это основная причина и способ ее воспроизведения.

Сценарий:

1) Приложение установлено на устройстве Android, логин естьготово.

2) Приложение переместилось в фоновый режим.

3) Через 3-4 дня приложение возобновило работу, нажав на значок запуска приложения и застревало на заставке.

4) Приложение снова заработало, когда
принудительная остановка при настройке телефона

Я не могу воспроизвести эту проблему, не оставляя ее в фоновом режиме более 3-4 дней.Не могли бы вы предложить несколько подходов, чтобы узнать причину и шаги по воспроизведению этой проблемы, не переводя приложение в фоновый режим более чем на 4 дня.

Ниже журналы, напечатанные с MvvmCross, и приложение зависает на заставке.Журнал оператора выделен жирным шрифтом «Искатель типа модели представления недоступен - при условии, что мы ищем заставку - возвращаем ноль» - печатается 3-4 раза, а затем приложение застревает на заставке.Хотя приложение застряло на заставке.push-уведомления принимаются приложением.

Настройка: запуск PlatformServices "

Настройка: запуск настроек MvvmCross"

Настройка: запуск Singleton Cache "

"mvx": "Искатель типа модели представления недоступен - при условии, что мы ищем заставку - возвращает ноль"

"mvx": "Искатель типа модели представления не доступен -при условии, что мы ищем заставку - с возвращаемым нулем "

" mvx ":" Нет доступного искателя типа модели представления - при условии, что мы ищем заставку - с возвратом нулевого "

Пожалуйста, помогите мне узнать, почему вышеуказанный оператор журнала, выделенный жирным шрифтом, печатается 3-4 раза и почему журналы из _setup.InitializeSecondary () не печатаются, а затем приложение застревает на заставке. Похоже на установкузавис между ними из-за какого-то тупика или состояния гонки. Это действительно поможет мне, если у вас есть какие-либо предложения, чтобы узнать возможности узнать причину и способ воспроизвести эту проблему. Спасибо в advance.

Обновлено: Мы можем воспроизвести этот сценарий, комментируя вызов InitializeSecondary () из MvxAndroidSetupSingleton-> InitializeFromSplashScreen () и приложение, застрявшее на экране-заставке.пожалуйста, предложите исправить эту заставку, застрявшую в коде приложения.По сути, мы не хотим изменять код MvvmCross и хотим исправить его из кода приложения.Ваша помощь приветствуется.Согласно журналам, строка кода _setup.InitializeSecondary (); в приведенном ниже методе из MvxAndroidSetupSingleton.cs не выполняется.Эта проблема воспроизводится только после того, как приложение остается в фоновом режиме более 4-5 дней.Сначала я пытаюсь узнать, почему это происходит в данном конкретном случае, а затем решить его.Заранее спасибо

Примечание: Я использую службу Android Foreground в своем приложении

public virtual void InitializeFromSplashScreen (IMvxAndroidSplashScreenActivity splashScreen) {lock (LockObject) {_currentSplashScreen = splashScreen;

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

Ответы [ 2 ]

0 голосов
/ 03 октября 2018

Android очистит память приложения, если оно долго работает в фоновом режиме или не используется.Это означает, что инфраструктура mvvm теряет все свои ссылки в памяти так же, как и для вашего контейнера IOC.Обычно фреймворк mvvm должен быть в состоянии справиться с этим, но по моему опыту иногда приходится вручную подталкивать его.

0 голосов
/ 03 октября 2018

Мы внесли много улучшений в запуск приложения в MvvmCross.Таким образом, есть вероятность, что ваша проблема была решена в более новой версии.

Хотя, поскольку в нем говорится «Нет доступного фильтра типов моделей представления», это, вероятно, будет означать, что процедура запуска не завершена или застрялачто-то делает и не может найти следующую ViewModel, которую он хочет продолжить.

...