Опубликован: 01.11.2011 | Уровень: специалист | Доступ: платный
Лекция 9:

Захоронение

Аннотация: Данная лекция посвящена многозадачности. Описывается ряд подходов, позволяющих переключаться между различными процессами в Windows Phone 7.

Дополнительные материалы к занятию можно скачать здесь.

Вложенные файлы: Presentation_9.pptx

Вложенные папки: Lecture_9_1

Перед программистами постоянно стоит задача решения проблемы многозадачности. Переключение потоков и совместное использование общих ресурсов, таких как экран или звуковая плата является нетривиальной задачей. Одним из способов организации одновременной работы нескольких приложений в Windows Phone 7 является так называемое "захоронение".

Для реализации многозадачности в настольных компьютерах используется панель задач. Реализации панели задач в Windows Phone 7 в силу ряда причин является нецелесообразным, вместо этого несколько процессов запускается с помощью стека. Концепция стека заключается в следующем. При нажатии на кнопку Start текущее приложение помещается в стек для того, чтобы могло запуститься новое приложение. При нажатии на кнопку Back текущее приложение завершается и из стека извлекается предыдущее приложение. В целях экономии системных ресурсов сделано так, чтобы приложение, помещенное в стек переставало работать. При извлечении приложения из стека оно начинает работать с нуля. В этом заключается суть захоронения.

Когда приложение вызывается с экрана запуска, говорят, что оно "запущено". При нажатии на кнопку Back оно "закрывается". Если приложение выполняется, и пользователь при этом нажимает на кнопку Start про приложение говорят, что оно "деактивировано". Это состояние "захоронения". В тот момент когда пользователь возвращается к приложению, выводя его из состояния захоронения, происходит "активация" приложения.

Проиллюстрируем сказанное на следующем примере. Мы разработаем приложение Silverlight Windows Phone, в котором подсчитывается количество нажатий мышью на экран и при каждом нажатии на экране отображается случайный город (В работе использовался фрагмент кода из книги Ч. Петзолдьда, 2010).

Создаем новый проект XNA Lecture_9_1.

Добавляем ссылку на библиотеку Microsoft.Phone:


Заполняем файл Game1.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Shapes;
using Microsoft.Phone.Controls;

namespace Lecture_9_1
{
    public partial class MainPage : PhoneApplicationPage
    {
        Random rand = new Random();
        int numTaps = 0;

        public MainPage()
        {
            InitializeComponent();
            UpdatePageTitle(numTaps);
        }
        protected override void OnManipulationStarted(ManipulationStartedEventArgs args)
        {
            UpdatePageTitle(++numTaps);
            args.Complete();
            base.OnManipulationStarted(args);
        }
        void UpdatePageTitle(int numTaps)
        {
            string[] picture = new string[] { "Москва", "Париж", "Уфа", "Токио", 
            "Нью-Йорк", "Рим", "Мадрид", "Хельсинки", "Вена", "Улан-Батор" };
            int n = picture.Length - 1;
            string str = picture[rand.Next(n)];
            ApplicationTitle.Text = "Случайный город ... " + str;
            PageTitle.Text = String.Format("Вы нажали {0} раз(а)", numTaps);
        }
    }
}
    
Листинг .

Запускаем приложение. При каждом нажатии на экран появляется случайный город.


Нажимаем на кнопку Back. Приложение захоранивается.


Нажимаем на кнопку . Снова запускаем наше приложение



Приложение не помнит исходное состояние.

Игорь Белов
Игорь Белов
Россия, г. Ейск
Александр Гринёв
Александр Гринёв
Украина, Днепропетрвск, Шаг