0

アプリがバックグラウンドになったときにアラームを設定したいのですが、アラームは継続して実行する必要があります。アラーム時間が経過したときに、httpリクエストをトリガーしたいのですが、それは可能ですか?もしそうなら、私はASIHttprequestを使用する必要がありますか?ASIHttprequestを使用すると、アプリは拒否されますか?

4

1 に答える 1

0

アプリがバックグラウンドで実行されているときにステルスダウンロードを実行する必要がある理由がわかりません。アプリの実行中にそれを行うことの何が問題になっていますか?そうは言っても...

はい、可能です。バックグラウンドでアプリを実行し続けるために使用できるさまざまなトリックがあります。最も簡単なのは、開いたソケット(またはUDPソケットだけ、またはキープアライブがあると言うかもしれません)と「オーディオ」(ただし、再生するのが無音の場合でも、オーディオを再生し続ける必要がある場合)の「voip」です。 )。

バッテリーの消耗をテストしていない限り、「voip」の使用はお勧めしません(ローカルホストに接続/バインドするだけで問題ない場合があります)。AFAIK、Skypeは「voip」を使用します。それはバッテリー寿命を大幅に短縮します(iPhone 4では約16〜24時間、私はそれを見つけるのに十分な時間待っていませんでした)。

「オーディオ」の使用はお勧めしません—それを機能させるには、何か(無音など)を再生する必要があると思います。これにより、iPodアプリが停止する可能性があります。ほぼ確実にバッテリーを消耗します。

ダウンロードを数分以上遅らせたい場合は、iOSが最大時間を提供するため、単純な「バックグラウンドタスク」は機能しないと思います(間違っていて、アプリで使用されているCPU時間に基づいている場合を除く) 、しかし私はそれを疑う)。次のように確認できます。

-(void)applicationDidEnterBackground:(UIApplication*)application
{
  UIBackgroundTaskIdentifier taskId = [application beginBackgroundTaskWithExpirationHandler:^{NSLog(@"Task expired");}];
  NSTimeInterval backgroundTime = application.backgroundTimeRemaining;
  NSLog(@"Background task for %g seconds ...", (double)backgroundTime);
  [NSThread sleepForTimeInterval:backgroundTime - 1];
  NSLog(@"Background task finishing with %g seconds remaining ...", (double)application.backgroundTimeRemaining);
  [application endBackgroundTask:UIBackgroundTaskIdentifier];
}

子供たちのことを考えてください!

于 2010-09-28T21:33:32.613 に答える