WP8.1 BackgroundMediaPlayer Проблема: отправка сообщений с данными между Foreground и Background

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

ValueSet messageDictionary = new ValueSet();
messageDictionary.Add("key", "value");
BackgroundMediaPlayer.SendMessageToBackground(messageDictionary);

Новый введенный объект ValueSet с KeyValuePairs(строка, объект) должен использоваться для связи между передним планом и фоновой задачей.
Я хотел бы отправить экземпляры пользовательских классов (скажем, аудиофайлы, содержащие Artist, Album, Filepath и т. Д. Медиальной библиотеки) для фоновой задачи. К сожалению, это невозможно (=> Исключение, тип не поддерживается) - кажется, что допускаются только примитивные значения.

Конечно, существует возможность сериализации данных. Кто-нибудь знает более легкий путь или рекомендуемый Microsoft путь?

====================================
ОБНОВИТЬ:
Единственно возможный путь кажется
(i) сериализовать данные и отправить их через сообщения
(ii) сохранить данные в файле и передать фоновую задачу для их обработки

тем не менее, буду благодарен за любые рекомендации по этой теме:-)

2 ответа

Вы можете отправить все данные в строковом формате и переключать ключи в обработчике MessageReceivedFromForeground в фоновой задаче. Очень простой и полезный пример можно найти здесь: http://mark.mymonster.nl/2014/05/02/windows-phone-81ndashbackground-audio-in-windows-phone-store-apps

[Упс 1 год спустя...]

Архитектура, которую я использую, представляет собой комбинацию двух упомянутых вами методов и третьего, который я использую:

  • 1 сериализованный объект класса связи
  • 1 файл базы данных
  • Несколько настроек (текущий трек, чтобы иметь возможность возобновить его в случае приостановки приложения)

Мои предварительные сообщения всегда имеют одинаковую структуру:

  • ключ, который всегда один и тот же; а также
  • значение, которое является сериализацией объекта связи

Этот коммуникационный объект включает в себя значение Action Enum (поэтому нет необходимости в разных ключах, так проще обрабатывать), и вся необходимая базовая информация содержится в коммуникационном объекте. Он работает довольно хорошо, пока вы не так много информации для обмена между задним и задним планом, производительность сериализации не должна быть проблемой. Вероятно, это можно оптимизировать, но я не уверен, что оно того стоит.

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

Другие вопросы по тегам