2016-05-11 3 views
0

私は、バックグラウンドで実行され、ユーザードライブを監視するアプリを持っています。iOS:ドライブトラッキングアプリのバックグラウンドアクティビティを減らす方法

アプリはCLLocationのバックグラウンドモードに起因するバックグラウンドで生きたまま。

しかし、問題は、過去24時間、22時間などのアプリショーのバックグラウンド活性ということです。私の理解は、バックグラウンドの活動が多くのバッテリーを使い果たしてしまうことです。

すべてのドライブ時間の合計にほぼ等しい背景活性を有するいくつかのドライブのトラッキングのアプリがあります。私のアプリは、それらの3倍のパワーを消費します。

は、どのように私はすべてのユーザーのドライブを検出することができ、同時にまた、これにより、電池の消費を減らす、バックグラウンド活性を低下させますか?

答えて

1

アプリケーションがCLLocationManagerのアクティブな毎回のdidUpdateLocationデリゲートがCLLocationManagerのデリゲートは、あなたのCLLocationManagerの設定で指定した精度に依存トリガする頻度をトリガーとなります。

- (CLLocationManager *)defaultLocationManager { 
    static dispatch_once_t pred = 0; 
    static CLLocationManager *locationManager = nil; 
    dispatch_once(&pred, ^{ 
     locationManager = [[CLLocationManager alloc] init]; 
     locationManager.delegate = self; 
     locationManager.desiredAccuracy=kCLLocationAccuracyThreeKilometers; //try setting accuracy filter to a value where it wont end up calling your delegate frequently yet gives you enough info about user location as per your need 
     locationManager.distanceFilter=3000; //try setting distance filter to a value where it wont end up calling your delegate frequently yet gives you enough info about user location as per your need 
     [locationManager requestAlwaysAuthorization]; 
    }); 
    return locationManager; 
} 

特に、バックグラウンドモードを使用している間は、場所の更新が特別です。あなたのアプリケーションを拒否する可能性が非常に高く、他の目的のために場所の更新を利用していて、ユーザーの場所を追跡している場合。

Appleは、あなたが明確にバッテリーを消耗しますGPSの継続的な使用を記載したアプリの説明にステートメントを追加する予定です。

ほとんどの場合、アプリはリアルタイムの位置情報更新を必要としません。あなたは、1つのそのようなケースで、まだあなたは、ユーザーの場所を追跡したい場合は、位置更新のためのバックグラウンドモードを削除し、significantLocationChanges

[[self defaultLocationManager] startMonitoringSignificantLocationChanges]; 

注使用してみてください:あなたは、バックグラウンドモード機能を必要といけないSignificantLocationChangesを観察するためを、あなたは意志あなたのアプリがリアルタイムの位置更新のようにバックグラウンドにある場合でもコントロールを引き続き受け取ります。

レッサー精度、低い消費電力アプリの小さい呼び出し:)

私の答えはあなたを助けた:)

+0

あなたの答えは非常に有用であると思います。私のアプリはユーザーを追跡するので、場所の許可は問題ではありません。しかし、私は1分ごとにユーザーの場所を取得したいと思います。バッテリーの寿命を保ちながら、どうすればそれが可能になりますか?私のアプリは、午前中に1時間、夕方に1時間しかユーザロケーションを必要としません。 –

+0

まず第一に、位置情報サービスは時間間隔で動作するようには設計されていません。コロケーションマネージャーは、iPhoneの位置が変更された場合にのみ、ロケーションの更新をトリガーします。あなたのiPhoneを1時間机の上に置いておけば、その場所は常にあなたの机が静止していると信じているからです:p次に、時間が無駄になり、アプリを60回起動して電池を焼くのですか? ?? 1分ごとに位置情報の更新が必要な理由を明確にしてください。なぜ、位置情報フィルタを中継できないのですか?私はあなたがユーザー –

+0

を追跡するためにのみ場所の更新を使用していると思います距離フィルタは非常に公正な仕事を行う必要があります。正確な距離を正確な距離に設定してみてください。精度レベルを最も正確なレベルに設定してください。あなたは良い状態にしておかなければなりません。あなたは2時間しかバックグラウンドのアクティビティを開始しないと、 22時間有効ですか?これは、あなたが開始したことを意味し、決してそれを止めなかったことを意味します。あなたのタイマーが停止する可能性があるので、アプリケーションが2つの場所の更新の間に一時停止する可能性があるので、私の提案は有効期限ハンドラまたはnstimerを使用できない –

関連する問題