Приложение WP7 деактивируется без причины через 10 секунд после перехода на страницу - PullRequest
0 голосов
/ 15 ноября 2011

Проект WP 7.1 начинается со страницы, на которой размещен элемент управления Panorama.В какой-то момент пользователь нажимает на ListBox, и это перемещает приложение на страницу сведений.

В случае, если отладчик подключен, все остается на экране, как и должно быть.Но если я тестирую приложение либо в эмуляторе, либо на телефоне без отладчика, примерно через 5-10 секунд после навигации по странице сведений, приложение деактивируется.

Без исключений, не закрывающихся, но деактивированныхдаже поднят.Я поместил окна сообщений в каждом из «обработчиков выхода», чтобы точно знать, что происходит, и обнаружил, что это деактивация.

Никакого пользовательского ввода не происходит после навигации и до деактивации.

В чем может быть причина такой дезактивации «без взаимодействия»?

Я не вызываю никаких «деактивирующих» запросов из кода.

Дополнительная информация: Страница сведений привязана к образцу модели представления, получаемой с помощью MVVM Light ViewModelлокатор.Локатор модели представления получает его из недействительного ядра, которое является статическим общедоступным свойством объекта App ( Да, я сделал контейнер IOC общедоступным через свойство App. Я знаю, что это, вероятно, ужасная практика, но я сомневаюсь, что проблема заключается в том, чтосвязано с этим ).Страница инициализируется очень хорошо и отображает все данные из класса модели типового представления.Похоже, приложение деактивируется из-за неактивности, но в WP7, насколько я знаю, такого нет.

ОБНОВЛЕНИЕ

Деактивация происходит ровно через 10 секунд после того, как я называю эту строку:

((PhoneApplicationFrame)(Application.Current.RootVisual)).Navigate(new Uri("/Views/BookDetailsView.xaml", UriKind.Relative));

из модели представления основного представления приложения,Проблемное представление - это подробное представление, а не основное.

Конструктор для BookDetailsView пуст (по умолчанию):

public partial class BookDetailsView : UserControl
    {
        public BookDetailsView()
        {
            InitializeComponent();
        }
    }

XAML для представления связывает его datacontext со свойствомлокатор модели легкого представления mvvm:

DataContext="{Binding Source={StaticResource Locator}, Path=BookDetails}"

Ресурс Locator объявлен в App.xaml и указывает на ViewModelLocator.cs.

Свойство, предоставляющее datacontext для проблемного представления,:

public static IBookDetailsViewModel BookDetailsStatic
        {
            get;
            set;
        }

        /// <summary>
        /// Gets the Main property.
        /// </summary>
        [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Performance",
            "CA1822:MarkMembersAsStatic",
            Justification = "This non-static member is needed for data binding purposes.")]
        public IBookDetailsViewModel BookDetails
        {
            get
            {
                return BookDetailsStatic;
            }
        }

* BookDetailsStatic инициализируется из вызова контейнера IoC в ctor ViewModelLocator:

BookDetailsStatic = App.Kernel.Get<IBookDetailsViewModel>();

В любом сценарии вызов для получения IBookDetailsViewModel возвращает экземпляр

public class SampleBookDetailsViewModel: IBookDetailsViewModel

, который имеет пустой конструктор и набор свойств.

решено Мое представление, к которому я направлялся, было объявлено как UserControl и должно было быть PhoneApplicationPage.

Ответы [ 2 ]

0 голосов
/ 16 ноября 2011

BookDetailsView объявлено как UserControl.

Переход на UserControl отключает приложение через 10 секунд.

Изменение типа представления на PhoneApplicationPage решает проблему.

0 голосов
/ 15 ноября 2011

Трудно сказать, не зная, что находится на странице, но вы можете достичь предела памяти.

В целом, вы можете считать лимит памяти равным 90 МБ, но вам лучше проверить DeviceStatus.ApplicationMemoryUsageLimit и DeviceStatus.ApplicationCurrentMemoryUsage и, возможно, отображать его на экране каждую половину или около того, чтобы отладить.

Вы также можете попробовать профилировщик, предполагая, что он не влияет на воспроизведение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...