0

私のアプリでは、CLLocationManager と AdWhirl を使用しています。バックグラウンド モードに関する特定の開発は行っていません。バックグラウンドでアプリを動作させたくありません。つまり、ユーザーが「ホーム ボタン」を押したときに、GPS 位置情報が更新されないようにする必要があります。

昨日の夕方「ホームボタン」を押したら、今朝iPhoneのバッテリーが切れていました。これは iOS 4.1 を搭載した iPhone 4 であり、ジェイルブレイクされておらず、バックグラウンド アプリが実行されていません。

バッテリーは昨日の夕方に約 35%、今朝は 0% でした (iPhone はシャットダウンされていました)。

GPS 位置情報が更新されるたびに呼び出されるデリゲートにブレークポイントを設定しました。アプリがバックグラウンド モードの場合、デリゲートは呼び出されません。したがって、バックグラウンド モードでは GPS が本当に無効になっていると思います。

今朝、バッテリーの消耗を追跡しています。15 分ごとに約 1% 低下しています。ちょっと多すぎると思います。

アプリがバックグラウンド モードになったときに何か特別なことをする必要がありますか? この1%の低下は正常だと思いますか?

4

1 に答える 1

0

はい、インターネット アクセスと GPS は、バッテリーを大きく消費します。他のアプリが実行されていないため、通常とは何を意味するのかまったくわかりません:)アプリを実行していない状態でテストし、15あたり1%を取得しなかったと仮定します分...

adwhirl の場合、アプリがバックグラウンドになったときに既にインターネットへのアクセスが停止しているかどうかは不明ですが、これを App Delegate に追加できます。

- (void)applicationDidEnterBackground:(UIApplication *)application {
    /*
     Use this method to release shared resources, save user data, invalidate timers, and store enough application state information to restore your application to its current state in case it is terminated later. 
     If your application supports background execution, called instead of applicationWillTerminate: when the user quits.
     */
    [lm stopUpdatingLocation];
    [adView ignoreAutoRefreshTimer]
}


- (void)applicationWillEnterForeground:(UIApplication *)application {
    /*
     Called as part of  transition from the background to the active state: here you can undo many of the changes made on entering the background.
     */
    [adView doNotIgnoreAutoRefreshTimer]
    [lm startUpdatingLocation];
}

(lm と adView は Location Manager オブジェクトと adWhirlView であり、どちらも App Delegate で宣言されています。App Delegate で作成したメソッドを介してすべての位置管理を行う方が便利であることがわかりました。)

于 2011-01-12T14:57:37.940 に答える