Статьи

Corona SDK: обработка приложений, приостановка

Это краткое руководство научит вас, как реагировать на ключевые события жизненного цикла приложения, такие как приостановка, завершение и возобновление. Читайте дальше, чтобы узнать больше!


В этом кратком руководстве объясняется, как помочь пользователям iOS перевести ваши приложения Corona SDK в фоновый режим ОС. Также будет продемонстрировано, как проверить отправку приложения в фоновый режим с помощью симулятора Corona SDK.

Давайте подготовим базовый проект. Поместите это в свой файл main.lua.

1
2
3
4
5
6
7
8
—— main.lua ——
 
— hide the status bar
display.setStatusBar( display.HiddenStatusBar )
 
— setup a solid background
local background = display.newRect(0, 0, display.contentWidth, display.contentHeight)
background:setFillColor(191, 69, 66)

Мы будем использовать простой файл config.lua.

1
2
3
4
5
6
7
8
application = {
    content = {
        width = 320,
        height = 480,
        scale = «letterBox»,
        fps = 30,
    }
}

Теперь, когда у нас есть базовый проект, давайте поговорим о том, как iOS работает с Corona SDK. По умолчанию Corona SDK не позволяет приложениям переводиться в фоновый режим. Скорее, стандартное поведение — полностью выйти из приложения. Когда пользователь возобновляет приостановленное приложение Corona, оно полностью перезапускается, если мы не изменим настройки по умолчанию. Откройте файл build.settings (если он еще не создан, создайте его). Добавьте эту строку:

1
UIApplicationExitsOnSuspend = false,

Мой теперь выглядит примерно так:

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
settings =
{
    orientation =
    {
        default = «portait»,
        supported =
        {
            «portrait»
        }
    },
    iphone = {
        plist = {
            UIApplicationExitsOnSuspend = false,
        },
    }
}

Теперь, когда пользователь возобновляет работу приложения, оно возвращается к точке, в которой оно было остановлено. Иногда это может сломать вещи в коде. Таймеры могут сбиться с пути, а анимация может зависнуть; Итак, нам нужен способ управления приложением в фоновом режиме. К счастью, у нас есть доступ к событию «applicationSuspend». iOS сообщит CoronaSDK, когда приложение будет приостановлено. В свою очередь, Corona SDK будет вызывать событие applicationSuspend. Давайте попробуем это с нашим демонстрационным приложением.

1
2
3
4
5
6
7
8
9
— create a function to handle all of the system events
local onSystem = function( event )
    if event.type == «applicationSuspend» then
        print(«backgrounded»)
    end
end
 
— setup a system event listener
Runtime:addEventListener( «system», onSystem )

Здесь мы создаем функцию для обработки системных событий. Существует несколько событий системы, но пока мы будем беспокоиться только о «applicationSuspend». Итак, если переданное событие — «applicationSuspend», то мы распечатаем милое сообщение на терминал.

Теперь нам нужно добавить функцию onSystem() в качестве прослушивателя для всех «системных» событий. Не забудьте вызвать Runtime:removeEventListener( "system", onSystem ) в ваших приложениях, если вы Runtime:removeEventListener( "system", onSystem ) сцену. В противном случае он будет ждать «системных» событий.

Теперь попробуем. Загрузите его в симулятор. Чтобы проверить фон приложения в симуляторе, зайдите в Hardware-> Suspend в меню. Вы также можете использовать сочетание клавиш + Стрелка вниз.

Corona SDK Backgroundr - Рисунок 1

Повторите процесс, чтобы возобновить приложение. Если все работает правильно, в терминале должно появиться сообщение «фоновое».

Есть и другие системные события, которые тоже полезны. Помимо событий applicationSuspend, у нас также есть доступ к
«applicationStart», «applicationExit» и «applicationResume». Как вы, вероятно, можете догадаться, они запускаются при первом запуске приложения, полностью завершаются и возобновляются после добавления, соответственно.

Этими событиями так же просто управлять, как и первыми. Базовый пример всех событий выглядит следующим образом (посмотрите, сможете ли вы заставить их всех срабатывать в симуляторе):

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
— create a function to handle all of the system events
local onSystem = function( event )
    if event.type == «applicationStart» then
        print(«start»)
    elseif event.type == «applicationExit» then
        print(«exit»)
    elseif event.type == «applicationSuspend» then
        print(«suspend»)
    elseif event.type == «applicationResume» then
        print(«resume»)
    end
end
 
— setup a system event listener
Runtime:addEventListener( «system», onSystem )

Теперь у вас должно быть хорошее представление о том, как обрабатывать приостановку приложений в Corona SDK.

Corona SDK Backgroundr - Рисунок 2

Вот окончательный код:

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
—— main.lua ——
 
— hide the status bar
display.setStatusBar( display.HiddenStatusBar )
 
— setup a solid background
local background = display.newRect(0, 0, display.contentWidth, display.contentHeight)
background:setFillColor(191, 69, 66)
 
— create a function to handle all of the system events
local onSystem = function( event )
    if event.type == «applicationStart» then
        print(«start»)
    elseif event.type == «applicationExit» then
        print(«exit»)
    elseif event.type == «applicationSuspend» then
        print(«suspend»)
    elseif event.type == «applicationResume» then
        print(«resume»)
    end
end
 
— setup a system event listener
Runtime:addEventListener( «system», onSystem )