Instapaperの開発者が、バックグラウンドアプリ更新のためのエレガントなソリューションを提案

Instapaperの開発者が、バックグラウンドアプリ更新のためのエレガントなソリューションを提案

  • Oligur
  • 0
  • vyzf
Instapaperの開発者が、バックグラウンドアプリ更新のためのエレガントなソリューションを提案
  • ニュース
投稿-46975-画像-e65ecb3cba24d43b77e4c8dc0d30c8b1-jpg

Apple は、開発者がいくつかのインテリジェントに選択された API (バックグラウンド オーディオなど) と普遍的な状態保存にアクセスできるようにすることで、iOS 4 で真のマルチタスクの欠点を巧みに軽減しました。

これは、ほとんどのユーザーやアプリにとって、バッテリー寿命や処理能力を大幅に消耗させることなく十分な性能でしょう。しかし残念ながら、iOS 4の新しいAPIは、マルチタスクの最大のメリットの一つである、フォーカスがない時に情報を更新したり同期したりできるバックグラウンドアプリケーションという機能には全く対応していません。つまり、iOS 4が登場しても、フィードリーダー、Twitterクライアント、IMプログラムなどのアプリは、インターネットから新しい情報を取得するために、依然として常に起動していなければならないということです。

App Store で人気の Instapaper の開発者である Marco Arment 氏は、個人ブログで、アプリがバックグラウンドで効率的に自己更新できるようにする方法について Apple に素晴らしい提案を投稿しました。それは、定期的なサードパーティ アプリのネットワーク リクエストを優先する機能を iOS に与えるというものです。

マルチタスクサービスをもう1つ追加すれば、多くのアプリケーションタイプでこの問題を解決できます。定期的なネットワークリクエストです。私の場合は以下のようになります。

• アプリケーションは、システムに NSURLRequest と、30 分ごと、数時間ごと、毎日などの理想的な更新間隔を提供します。

• iOS は、必要だと判断したときにそのリクエストを実行し、応答をローカル ファイルに保存します。

• 次にアプリケーションを起動すると、iOS は最新の応答の NSData を渡します。

リクエストを「実行すべきと判断した時に」実行することが重要です。iOSは例えば以下のような判断を下すことができます。

• バッテリー残量が少ない場合、接続状態が悪い場合、他のリクエストが実行中の場合、空きメモリが少ない場合、CPU 使用率が高い場合、またはユーザーが月間データ制限を超えると予測される場合は更新しません。

• アプリの要求と同じ頻度で更新しない、時間の経過とともに間隔を増やす、または 304 (変更なし) 応答を受信する頻度に基づいて間隔を動的に調整する。

• リクエスト元のアプリが長期間起動されていない場合は、まったく更新しないでください。

これにより、Instapaper はバックグラウンドで更新をダウンロードできるようになり、RSS リーダー、Twitter クライアント、チャット プログラム、天気予報やニュースのウィジェット、そして現在 iOS のマルチタスクからあまり恩恵を受けられていない他の多数のアプリケーションにも大きなメリットがもたらされるでしょう。

私はシステムアーキテクトではありませんが、これは効果的な解決策のように思えます。実際、あまりにも分かりやすく明白な解決策なので、iOS 5のアップデートまで待たなければそのような機能を実現できないと思うと、少し震え上がってしまいます…もっとも、これは昨晩のタリスカーのせいかもしれませんが。