iPhone - быстрое переключение приложений и iOS 4
Я пытаюсь получить следующую функциональность в своем приложении для iPhone:
- Когда фон заземлен, продолжает работать (не нужно выполнять фоновую работу)
- Когда возобновлено, приложение начинает с того места, где оно было остановлено.
В основном я хочу, чтобы в моем приложении был еще один экран, поскольку в UITabBarController есть несколько UINavigationController.
Я сделал все из следующего:
- Удостоверился, что я собираюсь с 4.1 SDK
- Установите для UIApplicationExitsOnSuspend значение false
- Обработайте DidEnterBackground и WillEnterForeground в моем AppDelegate
- Вызовите BeginBackgroundTask в DidEnterBackground, чтобы попытаться сохранить мое приложение открытым
Я использую MonoTouch, но это, вероятно, не в этом дело. Я могу принять ответы в Obj-C, конечно.
Я протестировал свое приложение на взломанном телефоне с помощью Backgrounder и вижу, что значок "приложение в фоновом режиме" исчезает сразу после нажатия кнопки "Домой". Я также попытался установить UIBackgroundModes в моем Info.plist, но безрезультатно.
Я что-то пропустил?
Или это то, что я должен был бы реализовать самостоятельно, чтобы возобновить предыдущее состояние моего приложения? Везде, где я читаю доклады, вроде бы это должно работать автоматически.
4 ответа
Я наконец-то связался с кем-то из IRC MonoTouch.
В MonoDevelop есть возможность сделать двойной проект iPad/iPhone, который я использовал. Это приводит к тому, что мое приложение ведет себя так, как будто оно работает с 3.2 SDK при развертывании на устройстве.
Я думаю, что мое решение состоит в том, чтобы установить iOS 4.2 SDK, который только что вышел, так как это рекламирует новую функцию многозадачности на iPad.
Если вы не хотите выполнять работу в фоновом режиме, не вызывайте beginBackgroundTask. Этот вызов предназначен для ситуаций, когда вы хотите выполнить какую-то работу в фоновом режиме. И если вы не закончите эту работу достаточно быстро, iOS закроет ваше приложение.
Когда я обновился до iOS 4.x, мое приложение MT начало демонстрировать это поведение без необходимости что-либо делать. iOS должна позаботиться об этом за вас.
Вам нужно не только поддерживать уход в фоновом режиме, но также поддерживать случаи, когда ваше приложение было закрыто. В коде инициализации вашего приложения вы должны возобновить состояние, в котором оно находилось. Например, когда вы нажимаете контроллер представления, используйте NSUserDefaults
сохранить значение для отображаемого в данный момент экрана, а затем при запуске прочитать это значение и отобразить связанный экран.