#windows-phone-7
#windows-phone-7
Вопрос:
Я сталкиваюсь с очень странными проблемами при разработке приложения WP7, которые обычно возникают через 30m или 1h, несмотря на то, что код действительно прост, почти равен примерам. В эмуляторе нет никаких проблем.
- сбой приложения без исключения
- необработанное исключение: {«0xffffffff»} (Да, сообщение «0xffffffff». И трассировка стека равна нулю)
- однажды я получил исключение, выданное при получении DateTimeOffset.Теперь свойство (!)
- Поток пользовательского интерфейса заморожен, не удалось завершить работу приложения, пришлось включить устройство циклически
Итак, на данный момент я думаю, что либо WP7 действительно нестабилен, либо аппаратное обеспечение моего устройства неисправно.
Существует ли тест на выгорание для WP7? Нравится Memtest86, Prime и другие утилиты для рабочего стола?
Редактировать: вот код, который вызывает проблемы:
public partial class MainPage : PhoneApplicationPage
{
private Accelerometer _accelerometer;
private GeoCoordinateWatcher _gps;
public MainPage()
{
InitializeComponent();
_accelerometer = new Accelerometer();
_accelerometer.ReadingChanged = new EventHandler<AccelerometerReadingEventArgs>(_accelerometer_ReadingChanged);
_accelerometer.Start();
_gps = new GeoCoordinateWatcher(GeoPositionAccuracy.High);
_gps.PositionChanged = new EventHandler<GeoPositionChangedEventArgs<GeoCoordinate>>(_gps_PositionChanged);
_gps.Start();
}
void _gps_PositionChanged(object sender, GeoPositionChangedEventArgs<GeoCoordinate> e)
{
Dispatcher.BeginInvoke(() =>
{
TBLocation.Text = e.Position.Location.ToString();
});
}
void _accelerometer_ReadingChanged(object sender, AccelerometerReadingEventArgs e)
{
Dispatcher.BeginInvoke(() =>
{
TBAccelX.Text = string.Format("X: {0:F2} g", e.X);
TBAccelY.Text = string.Format("Y: {0:F2} g", e.Y);
});
}
}
<phone:PhoneApplicationPage
x:Class="AccelerometerTest2.MainPage"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:phone="clr-namespace:Microsoft.Phone.Controls;assembly=Microsoft.Phone"
xmlns:shell="clr-namespace:Microsoft.Phone.Shell;assembly=Microsoft.Phone"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d" d:DesignWidth="480" d:DesignHeight="768"
FontFamily="{StaticResource PhoneFontFamilyNormal}"
FontSize="{StaticResource PhoneFontSizeNormal}"
Foreground="{StaticResource PhoneForegroundBrush}"
SupportedOrientations="Portrait" Orientation="Portrait"
shell:SystemTray.IsVisible="True">
<StackPanel>
<TextBlock Name="TBAccelX"/>
<TextBlock Name="TBAccelY"/>
<TextBlock Name="TBLocation"/>
</StackPanel>
</phone:PhoneApplicationPage>
РЕДАКТИРОВАТЬ: Как я и подозревал, телефон был неисправен. Приложение корректно работало на другом устройстве в течение 5 часов.
Ответ №1:
Я бы заподозрил утечку памяти (или ресурса).
Что делает приложение?
Возникает ли ошибка при использовании приложения или вы просто оставляете его? Делает ли приложение что-нибудь по таймеру?
Вы пробовали отслеживать использование памяти в течение срока службы приложения?
Поскольку в эмуляторе меньше других приложений и всего, что происходит в фоновом режиме, потребность системы в возврате ресурсов из вашего приложения, вероятно, будет намного меньше. Поэтому возможно, что такие проблемы также могут не отображаться в эмуляторе.
Если вы получите последнюю (бета) версию инструментов разработчика [mango], вы сможете запускать свой код с помощью нового встроенного профилировщика, чтобы вы могли видеть, что происходит с течением времени.
Комментарии:
1. Спасибо за ответ. Я опубликовал код. Приложение просто отображает данные датчиков на экране. Чтобы использовать профилировщик в последней версии SDK, я должен настроить версию 7.1, поэтому я не могу работать на устройстве с версией 7.0.