导航到页面10秒后,WP7应用程序无理由停用

时间:2011-11-15 09:51:23

标签: windows-phone-7 windows-phone-7.1

WP 7.1项目以托管Panorama控件的页面开头。在某些时候,用户单击ListBox,这会将应用程序导航到详细信息页面。

如果连接了调试器,所有内容都应该保留在屏幕上。但是,如果我在模拟器中或在没有调试器的手机上测试应用程序,大约在详细信息页面导航后的5-10秒内,应用程序将被停用。

没有无法解除的异常,没有关闭,但即使是被取消激活也是如此。我在每个“退出处理程序”中都放置了一个消息框,以确切知道发生了什么,并发现它已停用。

导航后和停用之前没有用户输入。

这种“无互动”停用的原因是什么?

我不会从代码中调用“停用”请求。

其他信息: 详细信息页面绑定到通过MVVM Light ViewModel定位器获取的示例视图模型。视图模型定位器从作为App对象的静态公共属性的ninject内核获取它(是的,我通过App属性公开了IOC容器。我知道这可能是一个可怕的做法,但我怀疑问题是链接到那个)。页面初始化很好,并显示示例视图模型类中的所有数据。几乎看起来应用程序由于不活动而被停用,但据我所知,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是从ViewModelLocator ctor中的IoC容器调用初始化的:

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

在任何情况下,获取IBookDetailsViewModel的调用都会返回

的实例
public class SampleBookDetailsViewModel: IBookDetailsViewModel

它有一个空构造函数和一堆属性。

解决 我一直在导航的观点被宣布为UserControl,应该是PhoneApplicationPage。

2 个答案:

答案 0 :(得分:0)

很难说不知道页面上有什么,但你可能会达到内存限制。

一般情况下,您可以将内存限制视为90mb,但最好还是检查DeviceStatus.ApplicationMemoryUsageLimitDeviceStatus.ApplicationCurrentMemoryUsage,并且可能每隔半秒左右在屏幕上显示一次以进行调试。

您也可以尝试使用探查器,假设它不会影响复制。

答案 1 :(得分:0)

BookDetailsView被声明为UserControl

导航到UserControl会在10秒内停用应用程序。

将视图类型更改为PhoneApplicationPage可解决问题。