私はiPhone用のFacebookのようなiPhoneアプリケーションを持っています。アプリケーションはサーバーに接続し、2時間ごとにすべてのメッセージを定期的に読み取る必要があります。すべてのメッセージを読み取るスレッドがありますが、アプリケーションが終了するとスレッドが機能しません。スレッドはメインデリゲートから独立して実行できますか、またはこの問題の解決策を見つけるにはどうすればよいですか?
2 に答える
アプリにバックグラウンドで処理を実行させることはできません。写真のアップロードなどのタスクを完了するためのAPIがありますが、それでも約10分後に強制終了されます。
しかし、Appleプッシュ通知サービスはあなたの問題に最も適切な解決策のようです。サーバーはデバイスに何か新しいことが起こっていることを通知し、ユーザーがアプリを開いたときに実際のメッセージを取得します。
編集: iOS 7以降、Appleは、実行中のタスクをスケジュールしてバックグラウンドでデータをフェッチできる機能を実装しました。これらのタスクは、特定の時間に実行されることが保証されていません。iOS7のリリースノートと以下のリンクされたメソッドを参照してください。
サーバーに接続してコンテンツを定期的に更新するアプリは、システムに登録して定期的に起動し、バックグラウンドでそのコンテンツを取得できます。登録するには、アプリのInfo.plistファイルにフェッチ値を含むUIBackgroundModesキーを含めます。次に、アプリが起動したら、setMinimumBackgroundFetchInterval: メソッドを呼び出して、更新メッセージを受信する頻度を決定します。最後に、 アプリケーションデリゲートにapplication:performFetchWithCompletionHandler:メソッドも実装する必要があります。
解決策はありません。
Appleは、アプリケーションが場所、オーディオ、VoIP、Newstandなどの特定のタイプでない限り、アプリケーションをバックグラウンドで実行することを許可しません(shouldBeginBackgroundTaskWithExpirationHandlerを使用する場合、アプリはアクティブ化されてから約10分間実行を継続できます)。
回避策はありません。他の多くの人が以前と同じことを行う方法を考えていますが、正当な方法はありません。アプリは、定期的なコールホームアクティビティをスケジュールすることはできません。
一時停止または終了状態になったアプリを実行できる唯一の方法は、ユーザーが明示的に、またはローカル通知またはリモートプッシュ通知に応答してアプリを起動することです。