Управление памятью, когда приложение ios находится в фоновом режиме - PullRequest
0 голосов
/ 02 января 2019

Согласно официальному руководству, приложение для iOS имеет несколько основных состояний, таких как передний план, фон и приостановленное состояние. Используемое приложение, чья страница просмотра находится в верхней части экрана, является состоянием переднего плана. Затем, когда нажата кнопка «Домой» или используются другие приложения, приложение находится в фоновом состоянии. После этого, в зависимости от системных ресурсов мобильного телефона, приостановленное приложение может быть уничтожено в любое время. Это информация, которую можно найти в Интернете.

Следующей была проблема, с которой я столкнулся. После долгого пребывания в фоновом режиме я вошел в приложение, которое разработал снова, и обнаружил, что перешел непосредственно к последней использованной странице просмотра (рисунок был прикреплен ниже. При использовании приложения на переднем плане, имя пользователя в настоящий момент зарегистрировано пользователь отображался под аватаром. При возврате из фона на передний план имя пользователя под аватаром становилось пустым). Это означает, что приложение не было уничтожено, но данные на странице потеряны, а некоторые данные в памяти также частично потеряны. Такое ощущение, что память, связанная с приложением, частично восстанавливается системой. Это меня очень смущает.

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

подсказки: фон в выражении возврата из фона на передний план, упомянутый выше, указывает на фон или состояние приостановки

просмотр при возврате приложения на передний план

вот мой код в AppDelegate

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {

    if(launchOptions != nil) {
       /*remote message push related code*/
    }

    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
    [self.window makeKeyAndVisible];
    return YES;
}

#pragma mark - APNS
- (void)application:(UIApplication *)application didFailToRegisterForRemoteNotificationsWithError:(NSError *)error {

}

- (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken
{
    /**/
}

- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult result))handler {
   /*processing code when receiving a message push*/
}

- (void)userNotificationCenter:(UNUserNotificationCenter *)center didReceiveNotificationResponse:(UNNotificationResponse *)response withCompletionHandler:(void (^)())completionHandler{
    /*processing code when receiving a message push*/
}


#pragma mark - application state
- (void)applicationWillResignActive:(UIApplication *)application {
    self.isRunningForeground = NO;
}

- (void)applicationDidEnterBackground:(UIApplication *)application {
}

- (void)applicationWillEnterForeground:(UIApplication *)application {
}

- (void)applicationDidBecomeActive:(UIApplication *)application {
    self.isRunningForeground = YES;
}

- (void)applicationWillTerminate:(UIApplication *)application {

}

Мой iphone 6sp работает под управлением iOS 11. Я разрабатываю приложение с помощью ARC.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...