• Когда я открываю свое приложение & amp; сделать что-нибудь (скажем, перейти к определенному ViewController), то я не касаюсь приложения несколько минут. IPhone заблокирован (приложение запускается через BackGround State).

  • Теперь после нескольких минут (около 5 минут), когда я разблокирую iPhone, мое приложение убивается. отсутствует в открытом состоянии (Active State). Мне нужно открыть его явно, щелкнув значок приложения.

  • Я ничего не делаю в BackGround State
  • Еще одна вещь, которую стоит добавить: приложение не вылетает
2
Rohit Pradhan 22 Фев 2016 в 13:30

2 ответа

Лучший ответ

Если вы правильно проверили, что ваше приложение не аварийно завершается, это отображается в пользовательском интерфейсе многозадачности, и вы не выполнение кода в фоновом режиме, тогда я бы сказал, что ваше приложение завершается системой (из-за нехватки памяти или чего-то еще).

в документации Apple упоминается:

Приложения должны быть готовы к завершению в любой момент и не должны ждать, пока сохранятся пользовательские данные или будут выполнены другие важные задачи. Завершение работы по инициативе системы - нормальная часть жизненного цикла приложения. Система обычно закрывает приложения, чтобы освободить память и освободить место для других приложений, запускаемых пользователем, но система также может закрывать приложения, которые плохо себя ведут или не реагируют на события своевременно.

Приостановленные приложения не получают уведомления о завершении работы; в система завершает процесс и освобождает соответствующую память. Если приложение в настоящее время работает в фоновом режиме и не приостановлено, система вызывает applicationWillTerminate: своего делегата приложения перед к прекращению.

Итак, в вашем сценарии произошло то, что приложение перешло в состояние приостановки, и по прошествии определенного периода времени (тех 5 минут, которые вы упомянули) приложение было прекращено системой.
Взгляните на Цикл фонового перехода.

Если вы хотите снизить вероятность завершения работы вашего приложения из-за нехватки памяти, взгляните на Что делать, когда ваше приложение переходит в фоновый режим, в частности:

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

2
Alex 22 Фев 2016 в 11:09

Убедитесь, что фоновые режимы включены в параметрах возможностей (я работал над приложением для навигации и поддерживаю работу приложения в фоновом режиме более 8 часов для отслеживания) в цели C реализуйте следующий код

- (void)backgroundCleanDisk {
    Class UIApplicationClass = NSClassFromString(@"UIApplication");
    if(!UIApplicationClass || ![UIApplicationClass respondsToSelector:@selector(sharedApplication)]) {
        return;
    }
    UIApplication *application = [UIApplication performSelector:@selector(sharedApplication)];
    __block UIBackgroundTaskIdentifier bgTask = [application beginBackgroundTaskWithExpirationHandler:^{
        // Clean up any unfinished task business by marking where you
        // stopped or ending the task outright.
        [application endBackgroundTask:bgTask];
        bgTask = UIBackgroundTaskInvalid;
    }];

    // Start the long-running task and return immediately.
    [self cleanDiskWithCompletionBlock:^{
        [application endBackgroundTask:bgTask];
        bgTask = UIBackgroundTaskInvalid;
    }];
}
0
Sky Appliconic 22 Фев 2016 в 13:04