2016-11-14 5 views
0

Ich fing an, an einer bestehenden App zu arbeiten und bemerkte, dass die Zeit "Fast-Forwards", wenn die App für eine lange Zeit im Hintergrund war. Ich habe es bei (Beispiel) 09:30 Minuten heruntergefahren, als ich es um 14:21 Uhr öffnete, tat es die ganze Arbeit, aber nur dann fängt es an, die UI zu aktualisieren. In wenigen Sekunden durchläuft es alle Daten von fünf Minuten im Hintergrund.Daten fließen nach App-Eröffnung mit iOS/Obj-c

Dieses nicht akzeptables Verhalten für meine Anwendung ist, so ist es das, was ich getan habe:

  • hinzugefügt Hintergrundmodus (location) auf meine Fähigkeiten
  • Natürlich habe ich CoreMotion verknüpft den Kreisel verwenden/Beschleunigungsmesser.

    self.motionManager = [[CMMotionManager alloc] init]; 
    
    //Gyroscope 
    if([self.motionManager isGyroAvailable]) 
    { 
        // Start the gyroscope if it is not active already 
        if([self.motionManager isGyroActive] == NO) 
        { 
         // Update us 2 times a second 
         // [self.motionManager setGyroUpdateInterval:1.0f/1.0f]; 
    
         [_motionManager setAccelerometerUpdateInterval:0.1]; 
         [self.motionManager 
         startAccelerometerUpdatesToQueue:[NSOperationQueue mainQueue] 
         withHandler:^(CMAccelerometerData *accelerometerData, NSError *error) { 
          if(error){ 
    
           NSLog(@"%@", error); 
          } 
          else { 
           //NSString *x = [[NSString alloc] initWithFormat:@"%.02f",accelerometerData.acceleration.x]; 
    
           float g = 9.80665f; 
           float AccelX = accelerometerData.acceleration.x * g; 
           float Accely = accelerometerData.acceleration.y * g; 
           float Accelz = accelerometerData.acceleration.z * g; 
    
           [self getSicknessIndicator:AccelX ay:Accely az:Accelz]; 
          } 
         }]; 
    
         //Receive the gyroscope data on this block 
    
    
        } 
    } 
    

Ich bin mir nicht ganz sicher, warum dieses Verhalten geschieht, und ich habe auch versucht, eine Menge anderer Fragen auf Stackoverflow, aber ohne Erfolg, leider. Sie sagen mir meistens, dass ich den Hintergrundmodus hinzufügen soll.

Antwort

0

Nachdem Sie den Hintergrundmodus (Standort) aktiviert haben, müssen Sie einen Standortmanager einrichten und dann startUpdatingLocation anrufen. Solange Ihr Standortmanager Standort-Updates empfangen kann, erhält Ihre App alle Geräte-Bewegungsaktualisierungen in Echtzeit (auch wenn das Telefon gesperrt ist).

Hier ist der Link zu Apple guide.

Hier ist der Link zu einem answer mit Beispielcode für Standortmanager.

Verwandte Themen