(57)【要約】アプリケーションのリソース使用量の削減が、デバイスで失敗状態にあるときに、コンテンツのアップロードにおけるアプリケーションの試行（およびネットワーク・インタフェースへのコール）を減らすことによって達成することができる。アプリケーションは、アップロード・キューを管理することによって当該削減が実行される。管理は、コンテンツをアップロードする試行を行う前後でシステムに対し識別される失敗状態に基づいてアップロード・キューをポーズし、またポーズ解除することを含む。例えば、アプリケーションはネットワーク接続の損失を検出するように、アップロード・プロセスの外部でアプリケーションはネットワーク接続変更を検出することができ、アップロード・キューはポーズ状態に設定される。ここでは、新規のコンテンツであることがアップロード・キューで示される場合でも、アップロードの試行が行われることはない。【選択図】図１
2019536173.tif 000002
【特許請求の範囲】
【請求項１】
コンピューティング・デバイス上で起動するアプリケーションによるリソース使用量を削減する方法であって、
前記コンピューティング・デバイスで受け取った、写真、スクリーンショットおよび保存済みファイルのうち少なくとも１つのようなコンテンツをクラウド・サービスに送信するためにアップロード・キューを前記コンピューティング・デバイスにおいて管理するステップと、
前記アップロード・キューの状態を検査するステップであって、前記アップロード・キューが非ポーズ状態となるかポーズ状態となるが示されることを含むステップと、
前記アップロード・キューの状態を検査した後であり、前記アップロード・キューが非ポーズ状態となることが示されている間に、前記コンピューティング・デバイスにおいて、前記コンピューティング・デバイスのネットワーク・リソースを使用して、前記アップロード・キューにおいて新規なものと示されるコンテンツを前記クラウド・サービスに送信することによって、アップロード・プロセスを実行するステップと、
ネットワーク接続の損失と前記ネットワーク接続の可用性とについてのネットワーク接続の変更を検出するステップであって、前記ネットワーク接続の損失の検出に応じて、前記アップロード・キューが前記ポーズ状態に設定される、ステップと、
を含む、方法。
【請求項２】
請求項１記載の方法であって、更に、
新規のコンテンツを検出するステップと、
前記新規のコンテンツの検出に応じて、前記新規のコンテンツを前記アップロード・キューにおいて新規なものと示すステップと、
前記アップロード・キューが前記ポーズ状態である場合は、前記新規のコンテンツを前記クラウド・サービスに送信するようには、オペレーティング・システムと通信しないステップと、
前記アップロード・キューが非ポーズ状態である場合は、前記新規のコンテンツを前記クラウド・サービスに送信するように、前記オペレーティング・システムと通信するステップと、
を含む、方法。
【請求項３】
請求項１記載の方法において、ネットワークの変更を検出するステップが、
前記アップロード・キューにおいて新規なものと示される前記コンテンツの前記クラウド・サービスへの送信に失敗したことの失敗指示を受け取るステップであって、前記失敗指示がネットワーク接続エラーを示す、ステップと、
ネットワーク接続の変更の通知を受け取るステップであって、当該方法が、前記ネットワーク接続の変更を通知するトリガを受け取ることを、前記オペレーティング・システムによって登録するステップを含む、ステップと、
の一方または双方を含む、方法。
【請求項４】
請求項１記載の方法において、前記アップロード・キューを管理するステップが、
新規のコンテンツを検出したのに応じて、前記新規のコンテンツを前記アップロード・キューにおいて新規のものと示すステップと、
前記新規のコンテンツの前記クラウド・サービスへの送信に成功した場合に、前記新規のコンテンツを、前記アップロード・キューにおいて送信済みと示すステップと、
を含む、方法。
【請求項５】
請求項１記載の方法において、前記ネットワーク接続の可用性の検出に応じて、前記アップロード・キューが前記非ポーズ状態に設定される、方法。
【請求項６】
システムであって、
処理システムと、
１つ以上のコンピュータ可読ストレージ媒体と、
前記１つ以上のコンピュータ可読ストレージ媒体上に格納されるアップロード・キューと、
前記１つ以上のコンピュータ可読ストレージ媒体上に格納されるオペレーティング・システムと、
前記１つ以上のコンピュータ可読ストレージ媒体上に格納されるプログラム命令で具現化されるアプリケーションであって、前記処理システムによって実施されると、前記処理システムに、少なくとも、
コンテンツをクラウド・サービスに送信するための前記アップロード・キューを管理し、
前記アップロード・キューが非ポーズ状態となるかポーズ状態となるかが示されることを含む、前記アップロード・キューの状態を検査し、
前記アップロード・キューの状態を検査した後であり、前記アップロード・キューが前記非ポーズ状態となることが示されている間に、前記コンピューティング・デバイスのネットワーク・リソースを使用して、前記アップロード・キューにおいて新規なものと示されるコンテンツを前記クラウド・サービスに送信することによって、アップロード・プロセスを実行し、
失敗状態および成功状態の状態変更を検出し、前記失敗状態の検出に応じて、前記アップロード・キューが前記非ポーズ状態に設定される、
ように指令する、アプリケーションと、
を備える、システム。
【請求項７】
請求項６記載のシステムにおいて、前記１つ以上のコンピュータ可読ストレージ媒体上に格納される前記プログラム命令が、更に、前記処理システムに、
新規のコンテンツの検出に応じて、前記新規のコンテンツを前記アップロード・キューにおいて新規なものと示し、
前記アップロード・キューが前記ポーズ状態である場合は、前記新規のコンテンツを前記クラウド・サービスに送信するようには、オペレーティング・システムと通信せず、
前記アップロード・キューが非ポーズ状態である場合は、前記新規のコンテンツを前記クラウド・サービスに送信するように、前記オペレーティング・システムと通信する、
ように指令する、システム。
【請求項８】
請求項６記載のシステムにおいて、前記処理システムに、前記失敗状態および前記成功状態の前記状態変更を検出するように指令する前記命令が、前記処理システムに少なくとも、
前記アップロード・キューにおいて新規なものと示される前記コンテンツの前記クラウド・サービスへの送信に失敗したことの失敗指示を受け取るように指令し、
前記失敗指示が既知のネットワーク接続エラーを示す、システム。
【請求項９】
請求項６記載のシステムにおいて、前記処理システムに、前記失敗状態および前記成功状態の前記状態変更を検出するように指令する前記命令が、前記処理システムに少なくとも、
状態変更を通知するトリガを受け取ることを、前記オペレーティング・システムによって登録し、
前記状態変更の通知を受け取る、
ように指令する、システム。
【請求項１０】
前記成功状態の検出に応じて、前記アップロード・キューが非ポーズ状態に設定される、請求項６記載のシステム。
【請求項１１】
前記コンテンツが、写真、スクリーンショットおよび保存済みファイルのうち少なくとも１つを含む、請求項６記載のシステム。
【請求項１２】
アプリケーションを有する１つ以上のコンピュータ可読ストレージ媒体であって、処理システムによって実施されると、前記処理システムに、
コンピューティング・デバイスで受け取ったコンテンツをクラウド・サービスに送信するためにアップロード・キューを、前記コンピューティング・デバイスにおいて管理するステップと、
前記アップロード・キューの状態を検査するステップであって、前記アップロード・キューが非ポーズ状態となるかポーズ状態となるが示されることを含むステップと、
前記アップロード・キューの状態を検査した後であり、前記アップロード・キューが非ポーズ状態となることが示されている間に、前記コンピューティング・デバイスにおいて、前記コンピューティング・デバイスのネットワーク・リソースを使用して、前記アップロード・キューにおいて新規なものと示されるコンテンツを前記クラウド・サービスに送信することによって、アップロード・プロセスを実行するステップと、
ネットワーク接続の損失と前記ネットワーク接続の可用性とについてのネットワーク接続の変更を検出するステップであって、前記ネットワーク接続の損失の検出に応じて、前記アップロード・キューが前記ポーズ状態に設定される、ステップと、
新規のコンテンツを検出するステップと、
前記新規のコンテンツの検出に応じて、前記新規のコンテンツを前記アップロード・キューにおいて新規なものと示すステップと、
前記アップロード・キューが前記ポーズ状態である場合は、前記新規のコンテンツを前記クラウド・サービスに送信するようには、オペレーティング・システムと通信しないステップと、
前記アップロード・キューが非ポーズ状態である場合は、前記新規のコンテンツを前記クラウド・サービスに送信するように、前記オペレーティング・システムと通信するステップと、
を含む方法を実行するように指令する、媒体。
【請求項１３】
請求項１２記載の媒体において、ネットワークの変更を検出するステップが、
前記アップロード・キューにおいて新規なものと示される前記コンテンツの前記クラウド・サービスへの送信に失敗したことの失敗指示を受け取るステップであって、前記失敗指示がネットワーク接続エラーを示す、ステップと、
ネットワーク接続の変更の通知を受け取るステップであって、前記方法が、前記ネットワーク接続の変更を通知するトリガを受け取ることを、前記オペレーティング・システムによって登録するステップを含む、ステップと、
の一方または双方を含む、媒体。
【請求項１４】
請求項１２記載の媒体において、前記ネットワーク接続の可用性の検出に応じて、前記アップロード・キューが非ポーズ状態に設定される、媒体。
【発明の詳細な説明】
【背景技術】
【０００１】
[0001]  クラウド・ストレージはデータ・ストレージの１モデルであり、データが、インターネットからアクセスされる遠隔サーバ上、即ち「雲」に格納される。クラウド・ストレージ・サービスはインターネット・ホスティング・サービスであり、ユーザが、クラウド・ストレージにそれらのファイルをアップロードして同期し、また、インターネットに接続される任意のデバイス（例えば、モバイル・フォン、タブレット、またはコンピュータ）からそれらファイルにアクセスするのを可能にする。
【０００２】
[0002]  例えば、ＭＩＣＲＯＳＯＦＴ ＯＮＥ ＤＲＩＶＥ、ＤＲＯＰＢＯＸ、ＧＯＯＧＬＥ ＤＲＩＶＥ、ＢＯＸ、およびＡＰＰＬＥＩＣＬＯＵＤＤＲＩＶＥのような多くのストレージ・サービスがある。オペレーティング・システムの中には、バックアップ機能を有し、クラウド・ストレージ・サービスと相互作用するものもある。より詳細には、オペレーティング・システムの中は、クラウド・ストレージ・サービスへの通信にビルト・インされているものもある。
【０００３】
[0003]  現在のところ、オペレーティング・システムの外部にあるアプリケーションは、ネットワーク接続がない場合でも、ファイルのアップロードの試行を継続することによって、複数可にわたり異なるファイルのアップロードを試行することによるのと同様に、リソースを浪費することになり得る。
【発明の概要】
【発明が解決しようとする課題】
【０００４】
[0004]  クラウドにコンテンツをアップロードするアプリケーションのためにリソース使用量を削減するための技術が説明される。
【課題を解決するための手段】
【０００５】
[0005]  アプリケーションは、コンピューティング・デバイスで受け取ったコンテンツをクラウド・サービスに送信するためにアップロード・キューを管理することができる。コンテンツは、これらに限定されないが、写真、スクリーンショット、および保存済みファイル等を含む。アップロード・キューを管理することは、検出された新規のコンテンツをアップロード・キューに追加することと、新規のコンテンツをアップロード・キューにおいて新規なものと示すことと、を含む。アップロード・キューを管理することは、更に、新規のコンテンツのクラウド・サービスへの送信に成功した場合に、新規のコンテンツを、アップロード・キューにおいて送信済みのものと示すことと、アップロードに失敗したコンテンツを、アップロード・キューにおいて新規なものと示すことと、を含む。加えて、アップロード・キューを管理することは、更に、検出された状態変更に基づいて、アップロード・キューをポーズすること、およびポーズ解除することを含む。
【０００６】
[0006]  アプリケーションは、コンピューティング・デバイスのオペレーティング・システムと通信し、アップロード・キューにおいて新規であると示される任意のコンテンツを送信することができ、その間、アップロード・キューは、コンピューティング・デバイスのネットワーク・リソースを使用するクラウド・サービスに対し、非ポーズ状態となることが示されている。有利なことに、新規なコンテンツ・プロセスの外部のアプリケーションは、ネットワーク接続の損失およびネットワーク接続の可用性についてネットワーク接続の変更を検出する。その結果、ネットワーク接続の損失の検出に応じて、アプリケーションは、アップロード・キューをポーズ状態に設定することができる。ここでは、新規のコンテンツであることが示される場合でも、何れのアップロードが実行されることにはならない。当該キューをポーズするまたはポーズ解除するために、他の失敗状態が検出され、また、使用される。
【０００７】
[0007]  この摘要は、詳細な説明において以下で更に説明する概念から選択したものを、簡略化した形態で紹介するために設けられている。この摘要は、特許請求する主題の主要な特徴や必須の特徴を特定することを意図するのではなく、特許請求する主題の範囲を限定するために使用されることを意図するのでもない。
【図面の簡単な説明】
【０００８】
【図１】図１は、本発明の種々の実施形態が実施される例示の動作環境を示す。
【図２】図２は、本明細書で説明するアプリケーション・リソース使用量の削減を組み込んだアプリケーションの例示の実装態様を示す。
【図３】図３は、リソース使用量を削減することなくコンテンツの自動アップロードを提供する方法についての例示のプロセスのフロー図を示す。
【図４Ａ】図４Ａは、リソース使用量の削減を提供する方法についての例示のプロセスのフロー図を示す。
【図４Ｂ】図４Ｂは、リソース使用量の削減を提供する方法についての例示のプロセスのフロー図を示す。
【図５】図５は、リソース使用量の削減を提供する方法についての例示のフロー図を示す。
【図６】図６は、リソース使用量の削減を適用して組み込んだアプリケーションについての例示のユーザ・インタフェースを示す。
【図７】図７は、本明細書に説明される特定の実装態様で使用されるコンピューティング・デバイスのコンポーネントを示すブロック図である。
【発明を実施するための形態】
【０００９】
[0015]  コンテンツをクラウドにアップロードするアプリケーションのためにリソース使用量を削減する技術が、説明される。
【００１０】
[0016]  アプリケーションは、コンピューティング・デバイスで受け取ったコンテンツをクラウド・サービスに送信するためにアップロード・キューを管理することができる。本明細書において「アプリケーション」および「アプリ」の語は、相互に互換可能に使用される。また、「送信」および「アップロード」の語は、相互に互換可能に用いられる。コンテンツは、これらに限定されないが、写真、スクリーンショット、保存済みファイル等を含む。アップロード・キューを管理することは、検出された新規のコンテンツをアップロード・キューに追加することと、新規のコンテンツを、アップロード・キューにおいて新規のものと示すこととを含む。アップロード・キューを管理することは、更に、更に、新規のコンテンツのクラウド・サービスへの送信に成功した場合に、新規のコンテンツを、アップロード・キューにおいて送信済みのものと示すことと、アップロードに失敗したコンテンツを、アップロード・キューにおいて新規なものと示すことと、を含む。加えて、アップロード・キューを管理することは、更に、検出された状態変更に基づいて、アップロード・キューをポーズすること、およびポーズ解除することを含む。
【００１１】
[0017]  アプリケーションは、コンピューティング・デバイスのオペレーティング・システムと通信し、コンピューティング・デバイスのネットワーク・リソースを使用して、アップロード・キューにおいて新規のものと示されるコンテンツをクラウド・サービスに送信することができる。有利なことに、アップロード・プロセスの外部で、アプリケーションは、更に、ネットワーク接続の損失とネットワーク接続の可用性とについてのネットワーク接続変更を検出することができる。その結果、ネットワーク接続の損出の検出に応じて、アプリケーションはアップロード・キューをポーズ状態にセットすることができる。ここでは、新規のコンテンツであることが示される場合でも、アップロードの試行が実行されることにはならない。
【００１２】
[0018]  有利なことに、説明される技術は、現在のネットワーク可用性のステータスを識別することを組み込む。これにより、ソフトウェア・プログラムを、ネットワーク接続がないときに、複数回にわたりアップロードを試行することによって浪費されることになるリソースを削減することになる。更に、ネットワーク可用性を検出することは、アップロード・プロセスの外部で実行される。その結果、アップロード・プロセスは、新規のコンテンツが検出されるたびにアップロードするのよりも前に、ネットワーク接続性を検査することを必要としないようにできる。
【００１３】
[0019]  図１は、本発明の実施形態を実施することができる例示の動作環境を示す。図１を参照すると、例示の動作環境は、他のユーザ・コンピューティング・デバイス（不図示）と同様に、クラウド・サービス１４５と通信するようにネットワーク１５５に動作可能に結合されたるコンピューティング・デバイス１００を含むことができる。クラウド・サービス１４５は、サーバ１５０のような１つ以上のサーバによって実装することができる。
【００１４】
[0020]  ネットワーク１５５は、これらに限定されないが、セルラ・ネットワーク（例えば、ワイヤレス・フォン）、ポイント・ツー・ポイント・ダイヤル・アップ接続、衛星ネットワーク、インターネット、ローカル・エリア・ネットワーク（ＬＡＮ）、ワイド・エリア・ネットワーク（ＷＡＮ）、ＷｉＦｉネットワーク、アド・ホック・ネットワーク、またはこれらの組み合わせを含むことができる。このようなネットワークは、ハブ、ブリッジ、ルータ、スイッチ、サーバ、およびゲートウェイのような広範な種別のネットワーク構成要素を接続するために広く利用される。ネットワーク１５５は、インターネットのようなパブリック・ネットワーク、および／またはセキュア・エンタープライズ・プライベート・ネットワークのようなプライベート・ネットワークを含んだ１つ以上の接続済みネットワーク（例えば、マルチ・ネットワーク環境）を含んでもよい。当業者には理解されるように、ネットワーク１５５へのアクセスは、１つ以上の有線または無線アクセス・ネットワークを介して提供されてもよい。
【００１５】
[0021]  コンピューティング・デバイス１００は、これらに限定されないが、パーソナル・コンピュータ（例えば、デスクトップ・コンピュータ）、ラップトップ、パーソナル・デジタル・アシスタント（ＰＤＡ）、モバイル・フォン（またはスマートフォン）、タブレット、スレート、ゲーミング・デバイス若しくはコンソール、スマート・テレビジョン、または端末とすることができる。これらは、ネットワーク１５５を通じて、サーバ１５０のようなサーバにアクセスするのに使用される。サーバ１５０は、エンタープライズ・サーバ、クラウド・ベース・サーバ、専用サーバ、ホスト・サーバ等であってもよい。
【００１６】
[0022]  なお、コンピューティング・デバイス１００は、他のコンピューティング・デバイス（不図示）と同様に、任意の種別のコンピュータ・システムとしてよく、ソフトウェア・プログラムをロードして実行する機能と、ネットワーク１５５のようなネットワークにアクセスすることができる機能と、をユーザに提供することが明らかである。
【００１７】
[0023]  図７に示されるように、コンピューティング・デバイス１００は、コンピューティング・システム７００に関して説明されるようにして具現化される。例えば、コンピューティング・デバイス１００は、音声若しくはタッチによって、並びに／または、コンピューティング・デバイス１００に動作可能に結合されるキーボードおよび／若しくはマウスを通じることで、ユーザからの入力を受け取るように構成される。コンピューティング・デバイス１００は、更に、ユーザに対し、１つ以上のユーザ・インタフェースを表示するように構成されたディスプレイ（例えば、コンピュータ・モニタ）を含むことができる。幾らかの例の中には、ディスプレイはタッチ・スクリーンとすることができるものもあり、コンピューティング・デバイス１００がディスプレイによってユーザ入力を受け取ってもよい。
【００１８】
[0024]  加えて、コンピューティング・デバイス１００は、プロセッサ１０５のような１つ以上の中央処理装置（ＣＰＵ）と、キャッシュ１１０のようなメモリと、ストレージ・システム１２５のような大規模ストレージと、ネットワーク・インタフェース（例えば、無線ネットワーク／通信インタフェース１３０、およびセルラ・ネットワーク／通信インタフェース１３５）並びにユーザ入力デバイス（例えば、カメラ１４０）のようなＩ／Ｏデバイスと、を用いて構成することができる。コンピューティング・デバイス１００の構成要素は、バスを介して相互に通信することができる。
【００１９】
[0025]  コンピューティング・デバイス１００は、オペレーティング・システム１２０、および１つ以上のアプリケーション・プログラム１１５を実行するように構成される。アプリケーション・プログラム１１５は、アプリ・ストアからダウンロードされるアプリケーションとしてもよい。アプリケーション・プログラム１１５は、その下の(underlying)コンピューティング・デバイス１００への制限付きアクセスを有する。このような１つのプログラムは、図５で説明されるように、プロセス５００の機能を有するアプリ１１６である。
【００２０】
[0026]  オペレーティング・システム１２０は、コンピューティング・デバイス１００の動作を制御するためのコンピュータ・プログラムである。アプリケーション・プログラム１１５は、様々な機能を提供するオペレーティング・システム１２０の上で(on top of)実行するように構成される実行可能プログラムである。また、アプリケーション・プログラム１１５は、アプリ１１６のような、クラウド・ストレージと通信するアプリケーションを含むことができる。図５に説明されるように、プロセス５００の機能性を有するアプリ１１６は、コンピューティング・デバイス１００のリソースにアクセスするために、オペレーティング・システム１２０によって権利が付与される。つまり、アプリ１１６は、その下のコンピューティング・デバイス１００への制限付きアクセスを有するので、アプリ１１６は、オペレーティング・システム１２０と通信する結果、コンピューティング・デバイス１００のコンポーネントにアクセスすることができる。この通信について示すために、図１に分解図が提供される。
【００２１】
[0027]  前述したように、アプリ１１６は、その機能の一部としてクラウド・サービス１４５と通信し、例えば、コンテンツを交換する。アプリ１１６は、オペレーティング・システム１２０を通過し(go through)、その結果、ネットワークを通じてクラウド・サービス１４５と通信することができる。また、オペレーティング・システム１２０によって、アプリ１１６が、ネットワーク／通信インタフェース１３０またはセルラ・ネットワーク／通信インタフェース１３５のようなネットワーク・インタフェースにアクセスするのを可能にする。
【００２２】
[0028]  アプリ１１６は、クラウド・サービス145にコンテンツを送信するために、アップロード・キューを管理する。アップロード・キューは、アプリケーション・データ・リソース１１７で格納されたデータ構造とすることができる。アプリケーション・データ・リソースは、コンピューティング・デバイス１００が（オペレーティング・システム１２０を介して）アプリ１１６に割り当てるストレージ・システム１２５のセクションとすることができ、アプリ１１６が、ストレージの当該セクションにおいて生じるものを制御することを可能にする。アップロード・キューのデータ構造は、クラウド・サービス１４５にアップロードされることになるコンテンツを識別するデータベース・テーブルであってもよい。データベース・テーブルは、コンテンツが新規である、送信済みである、または失敗であるかについて示す情報を含むことができる。例えば、新規であることの指示は、コンテンツがクラウド・サービス１４５にアップロードされる準備ができていることを意味し、送信済みであることの指示は、コンテンツがクラウド・サービス１４５へのアップロードに成功したことを意味し、失敗であることの指示は、クラウド・サービス１４５へのコンテンツのアップロードの試行に成功しなかったことを意味する。
【００２３】
[0029]  他の有用な情報（例えば、アップロード・キューを管理するアプリ１１６を支援する情報）が、アプリケーション・データ・リソース１１７に格納されてもよい。例えば、アプリケーション・データ・リソース１１７はアップロード・キューのエラー情報やポーズ状態情報を収容してもよい。
【００２４】
[0030]  アプリ１１６は、１つ以上のアプリケーション・プログラミング・インターフェース（ＡＰＩ）を介してオペレーティング・システム１２０と通信する。ＡＰＩについての更なる説明は、図７に関して提供される。
【００２５】
[0031]  ＡＰＩを通じて、オペレーティング・システム１２０は、トリガ機能を提供することができる。アプリ１１６は、オペレーティング・システム１２０によって登録することができ、アプリケーション１１６が、登録済みのトリガに関連付けられる通知を受け取るのを可能にする。例えば、アプリ１１６は、ネットワーク変更のトリガを登録することができる。次いで、ネットワーク接続の状態が、例えば、使用可能なネットワーク接続からどの使用可能なネットワーク接続にも変更しない場合に、アプリ１１６は、変更についての通知をオペレーティング・システム１２０から受け取り、また、アプリ１１６は、適切なアクションを行うことができる。更に、アプリ１１６は、コンテンツ変更のトリガを登録することができる。コンテンツ変更のトリガは、通常、特別に指定されたフォルダまたは複数のフォルダ（若しくは、コンピューティング・デバイス１００上の何れの場所）のためのものでよい。コンテンツ変更のトリガを用いて、コンテンツが、指定されたフォルダ（複数可）内で（特別にまたは全般的に）変更する場合、アプリ１１６はオペレーティング・システム１２０から変更の通知を受け取り、また、アプリ１１６は適切なアクションを行うことができる。例えば、カメラ・ロールに対するコンテンツ変更のためのトリガの登録を想定する。コンピューティング・デバイス１００のカメラを用いて写真が撮影され、カメラ・ロールに保存される場合、アプリ１１６は、オペレーティング・システム１２０からカメラ・ロールにおける変更の通知を受け取り、アプリケーション１１６は適切なアクションを行うことができる。
【００２６】
[0032]  図２は、本明細書に説明される、リソース使用量の削減の適用を組み込んだアプリケーションについての例示の実装態様を示している。図２を参照すると、アプリ１１６は、アップロード・キュー管理モジュール２１０、新規コンテンツ・モジュール２１５、失敗検出モジュール２２０、およびアップロード・モジュール２３０を収容する。また、アプリケーション１１６は、アプリ１１６の様々な機能に関連付けられる他のモジュールを含んでもよい。
【００２７】
[0033]  アップロード・キュー管理モジュール２１０は、コンピューティング・デバイスで受け取ったコンテンツをクラウド・サービスに送信するために、アップロード・キューの管理に付随する機能を含む。コンテンツは、これらに限定されないが、コンピューティング・デバイスに保存されている、保存済みファイル、写真、スクリーンショット等を含んでもよい。例えば、アップロード・キュー管理モジュール２１０は、新規コンテンツ・モジュール２１５から新規のコンテンツの識別情報を受け取り、新規のコンテンツをエントリとして、アップロード・キューのデータ構造内に含める。また、アップロード・キュー管理モジュール２１０は、新規のコンテンツをアップロード・キューにおいて新規ものと示すことができ、これにより、新規のコンテンツがクラウド・サービスに送信される準備ができていることをアップロード・モジュール２３０が分かるのを可能にする。成功しなかったアップロードの通信をアップロード・モジュール２３０から受け取った後、アップロード・キュー管理モジュール２１０は、失敗したコンテンツを、アップロード・キューにおいて新規のものと示すことができ、これにより、その失敗したコンテンツが再びクラウド・サービスに送信される準備ができていることをアップロード・モジュール２３０が分かるのを可能にする。加えて、成功したアップロードの通信をアップロード・モジュール２３０から受け取った後、アップロード・キュー管理モジュール２１０は、新規のコンテンツをアップロード・キューにおいて送信済みのものと示すことができる。
【００２８】
[0034]  更に、アップロード・キュー管理モジュール２１０は、例えば、フラグを格納することによって、または、アップロード・キューがポーズ状態であることを示すポーズ・ビットを用いることによって、アップロード・キューを、ポーズ状態または非ポーズ状態にすることができる。アップロード・キューがポーズ状態にされる場合、新規のコンテンツであることがアップロード・キュー管理モジュール２１０によって示されている場合であっても、アップロード・モジュール２３０によりアップロードは試行されない。具体的には、アップロード・キューがポーズ状態である場合、アップロード・モジュール２３０は、新規のコンテンツをクラウド・サービスに送信するようには、オペレーティング・システムと通信しなくてもよい。また、アップロード・キューが非ポーズ状態に設定されている場合、アップロード・モジュール２３０は、アップロード・キュー管理モジュール２１０によって示される新規のコンテンツをクラウド・サービスに送信するように、オペレーティング・システムと通信してもよい。有利なことに、アップロード・モジュール２３０は、アップロード・キューにおいてポーズ状態または非ポーズ状態であることに依拠して、アクションを決定することができる。
【００２９】
[0035]  アップロード・モジュール２３０は、クラウド・ストレージ・サービスにコンテンツを送信することに付随する機能を含む。例えば、アップロード・キューが、アップロード・キュー管理モジュール２１０によって新規のものと示されるコンテンツを含み、また非ポーズ状態にあるときに、アップロード・モジュール２３０は、コンピューティング・デバイスのオペレーティング・システムと通信して、コンピューティング・デバイスのネットワーク・リソースを使用して新規のコンテンツをクラウド・サービスに送信することができる。例えば、オペレーティング・システムによって、アップロード・モジュール２３０は、無線ネットワーク／通信インタフェースまたはセルラ・ネットワーク／通信インタフェースのようなネットワーク・インタフェースにアクセスするのを可能にする。
【００３０】
[0036]  また、アプリ１１６は、トリガをオペレーティング・システムに登録してもよく、新規のコンテンツがデバイス上に格納されているとき、またはネットワーク接続の変更若しくは他の状態変更がある場合に、アプリケーション１１６が通知を受け取るのを可能にする。新規コンテンツ・モジュール２１５は、新規のコンテンツを検出することに付随する機能を含む。新規コンテンツ・モジュール２１５は、様々な方法で新規のコンテンツを検出してもよい。例えば、アプリ１１６がコンテンツ変更を示す通知を受け取るときに、新規コンテンツ・モジュール２１５は、オペレーティング・システムを介してストレージ・システムにアクセスして新規のコンテンツを識別してもよく、これにより、アップロード・キュー管理モジュール２１０が、新規のコンテンツをエントリとして、アップロード・キューのデータ構造に含めるのを可能にする。
【００３１】
[0037]  更に、新規コンテンツ・モジュール２１５はまた、オペレーティング・システムから通知を受け取ることなく、使用中のカメラのようなデバイスが入力を受け取ったことを識別することによって、新規のコンテンツを検出する。次いで、新規コンテンツ・モジュール２１５は、ストレージ媒体内で新規のコンテンツを探索する。
【００３２】
[0038]  失敗検出モジュール２２０は、ネットワーク接続変更または状態変更のようなシステム内の変更を検出することに付随する機能性を含む。例えば、失敗検出モジュール２２０は、ネットワーク接続の損失およびネットワーク接続の可用性についてネットワーク接続の変更を検出し、その結果、ネットワーク接続の損失の検出に応じて、失敗検出モジュール２２０がアップロード・キュー管理モジュール２１０と通信することができる。これにより、アップロード・キュー管理モジュール２１０がポーズ状態にアップロード・キューを設定するのを可能にする。ここでは、新規のコンテンツであると示された場合でも、アップロードの試行が実行されることにはならない。更に、アップロード・キュー管理モジュール２１０は、失敗検出モジュール２２０がネットワーク接続の可用性を検出して通信したことに応じて、アップロード・キューを非ポーズ状態に設定することができる。有利なことに、失敗検出モジュール２２０は、アップロード・プロセスの外部で動作することができる。
【００３３】
[0039]  別の例では、アプリ１１６がアップロード・キューにおいて新規のものと示されたコンテンツをクラウド・サービスに送信することに失敗した失敗指示を受け取った場合は、アプリ１１６は失敗指示を格納してもよい。失敗指示は、ネットワーク接続エラーのような既知のエラーを示す。失敗検出モジュール２２０は、格納された失敗指示で受け取った既知のエラーを検出し、次いで、既知のエラーを確認するためにオペレーティング・システムと通信する。オペレーティング・システムによって既知のエラーが確認される場合、失敗検出モジュール２２０は、アップロード・キュー管理モジュール２１０と通信して、アップロード・キューをポーズ状態にすることによってアップロード・キューをポーズさせることができ、また、失敗したコンテンツをアップロード・キューにおいて新規のものと示すことができる。失敗検出モジュール２２０はまた、オペレーティング・システムを介して、ユーザ・インタフェースを通じてユーザにエラーを通知する。これにより、ユーザがエラーを修復するのを可能にし、また、アップロード・キューを非ポーズ状態にセットすることによってコンテンツのアップロードを再開することができる。
【００３４】
[0040]  図３は、リソース使用量を削減することなく、コンテンツの自動アップロードを提供するための現行の方法についての例示のプロセスのフロー図を示している。前述したように、アプリケーションは、その下のシステムへの制限されたアクセスを有し、つまり、厳格なリソース制限を有する。図３を参照すると、プロセス３００は、これらの制約に起因して生じ得る問題の一例である。
【００３５】
[0041]  特定の例では、クラウド・ストレージ・アプリケーションは、コンテンツをユーザのクラウド・ストレージにアップロードするフィーチャーを有する。本フィーチャーは、写真、スクリーンショット、および保存済みのファイルのような新規のコンテンツを自動的に検出することができ、また、それらをユーザのクラウド・ストレージ・アカウントに対しアップロードすることができる。しかしながら、アプリケーションを使用してそれらファイルをアップロードすることができるネットワーク接続をユーザが有しない場合には、フィーチャーは、機能停止(break down)を開始することができる。検出された任意のファイルがアップロード・キューに追加され、また、アプリケーションはそれらファイルのアップロードを試行する。しかしながら、コンピューティング・デバイスが作動中のネットワーク接続を有していないので、そのファイル・アップロードは失敗する。つまり、アプリケーションは、バッテリ電源、メモリ、ＣＰＵシステム、および間違いなく失敗するファイルのアップロードを試行する他のシステム・リソースを使用している場合がある。更に、一旦ファイルが失敗すると、失敗が解消されることにはならないことが見込まれる。また、デバイスがネットワーク接続に再接続されるときは、そのファイルが自動的にはアップロードしないことになることが見込まれる。
【００３６】
[0042]  より詳細には、アプリケーションは、ユーザのコンピューティング・デバイスのオペレーティング・システムによって１つ以上のトリガを登録することができる（３０５）。これにより、アプリケーションが、登録済みのトリガに関連付けられる通知を受け取るのを可能にする。次いで、写真が撮影されて装置に保存されると、オペレーティング・システムは、新規の写真があることをアプリに通知する（３１０）。アプリケーションがオペレーティング・システムから新規の写真の通知を受け取ると（３１５）、アプリケーションは、新規の写真を検出し、新規の写真をアップロード・キューにおいて新規のものと示すことによって当該新規の写真をアップロード・キューに追加することができる（３２０）。
【００３７】
[0043]  図３に示すように、デバイスはネットワーク接続を損失している。しかしながら、新規の写真は新規のものと示され、つまり、アップロードの準備ができているので、アプリケーションは、オペレーティング・システムを用いてＡＰＩを介し、ネットワークを活性化することによって新規の写真のアップロードを試行することになる（３２５）。試行されたアップロードは、デバイスのネットワーク・リソースを使用する（３３０）。また、ネットワーク接続が損失しているので、新規の写真のアップロードの試行に失敗する。オペレーティング・システムは、アップロードの失敗を示し（３３５）、アプリケーションは失敗指示を受け取る（３４０）。アプリケーションは、アップロードの試行に失敗した理由を分かることなく、失敗指示を受け取るので、アプリケーションは、アップロードが再度試行されてはならないことが分からない。それ故、アプリケーションは、新規の写真を複数回にわたりアップロードするように試行する（３４５）。アプリケーションがアップロードを試行する回数は、ポリシ・ルールに基づくのがよい。試行されるアップロードのそれぞれで、アプリケーションはデバイスのネットワーク・リソースを使用する（３５０）。そして、毎回、ネットワーク接続がなおもダウンしている場合にはアップロードの試行は失敗する。更に、毎回、オペレーティング・システムは、既知のエラーを示すことなく、失敗指示をアプリケーションに送る（３５５）。アプリケーションは失敗指示を受け取り（３６０）、また、ポリシ・ルールに従って指定された回数にわたりアップロードを試行した後に、アプリケーションは、アップロードの試行に失敗した理由について提供することなく、新規の写真を、アップロード・キューにおいて失敗したものと示す（３６５）。
【００３８】
[0044]  加えて、このシナリオでは、ネットワークが尚もダウンしている間に、別の写真が撮影されてもよく、オペレーティング・システムは新規の写真についてアプリに通知する（３７０）。このプロセスは、ネットワーク・リソースを使用している間に、複数回にわたり、試行されたアップロードが失敗する都度継続する。何故ならば、エラーについての指示がなかったからである。
【００３９】
[0045]  図４Ａおよび図４Ｂは、リソース使用量の削減を提供する方法についての例示のプロセスのフロー図を示し、図５は、リソース使用量の削減を提供するための方法についえの例示のプロセスのフロー図を示す。
【００４０】
[0046]  様々な例によれば、アプリケーションは、ネットワーク接続がないかについて、または、失敗状態があるかについて、検出することができる。また、新規のコンテンツが入来すると即座に、任意の新規のコンテンツを尚も検出することができる。アプリケーションは、新規のコンテンツをアップロード・キューに追加することができる。しかしながら、アプリケーションは、その新規のコンテンツを実際にはアップロードしない。何故ならば、アプリケーションは、アップロードが失敗することになることを分かっており、このナレッジを使用して、アップロード・キューをポーズまたはポーズ解除することができるからである。デバイスが使用可能なネットワーク接続を獲得するか、または成功状態に戻るときに、アプリケーションは、接続を検出することができる。次いで、アプリケーションは、アップロード・キューをポーズ解除して、新規のコンテンツがクラウド・サービスへのアップロードを再び開始する。有利なことに、アプリケーションは、ネットワーク接続のステータス、すなわち失敗状態のステータスを、独立して検出および考慮に入れることができる。次いで、ネットワーク接続がダウンしている間、または、システムが失敗状態を収容している間は、アップロードからアップロード・キューを停止することができる。つまり、リソース使用料を削減する。
【００４１】
[0047]  図４Ａおよび図４Ｂは、どのようにリソース使用量の削減を実現するかについて更に詳細に示した説明を提供している。図４Ａは、新規のコンテンツであることがアップロード・キューに対して識別された後に、ネットワーク接続エラーが識別されるシナリオについて説明する。また、図４Ｂは、新規のコンテンツであることがアップロード・キューに対して識別される前に、ネットワーク接続エラーが識別されるシナリオについて説明する。
【００４２】
[0048]  図４Ａおよび図４Ｂのシナリオに示されるように、図３のプロセス３００によって説明される事態を回避することが可能である。ここでは、アプリケーションは、コンテンツを複数回数にわたりアップロードする試行をリトライする。
【００４３】
[0049]  図４Ａを参照すると、アプリケーションは、新規のコンテンツが追加されたとき、またはネットワーク接続の状態が変更したとき、すなわち、より詳細には、アプリケーションを実装するデバイスが接続性を損失したか獲得したときに通知されることになる１つ以上のトリガをオペレーティング・システムによって登録することができる（４０２）。たとえば、Ｗｉｎｄｏｗｓオペレーティング・システム用のＭｉｃｒｏｓｏｆｏｔＯＮＥＤＲＩＶＥａｐｐは、２つのトリガを使用して、ネットワーク接続または新規のコンテンツがないかについて決定することができる。これのトリガは、オペレーティング・システムから利用可能なネットワーク変更のトリガおよびコンテンツ変更のトリガを含む。例えば、ネットワーク変更のトリガは、ＮｅｔｗｏｒｋＳｔａｔｅＣｈａｎｇｅタイプを使用するＳｙｓｔｅｍＴｒｉｇｇｅｒとしてもよく、また、失敗がＷｅｂＥｒｒｏｒＳｔａｔｕｓ．ＯｐｅｒａｔｉｏｎＣａｎｃｅｌｅｄによって生じたことをレポートする個別のファイル・アップロードの失敗としてもよい。ネットワーク接続があるときにのみに替えて、トリガが常時起動するように設定されてもよい。それ故、アプリケーションは、ネットワーク接続がないときでさえ、コンテンツを検出し、コンテンツをアップロード・キューに追加することができる。ファイル・アップロードに失敗してアプリケーションがＷｅｂＥｒｒｏｒＳｔａｔｕｓ．ＯｐｅｒａｔｉｏｎＣａｎｃｅｌｅｄのエラーを受け取る場合、アプリケーションは、現在の接続状態を検査し、更にネットワーク接続がない場合にアップロード・キューをポーズする。更に、ＮｅｔｗｏｒｋＳｔａｔｅＣｈａｎｇｅトリガを介して、ネットワーク状態が変更したこと（例えば、Ｗｉ−Ｆｉ接続を獲得した、またはデータ接続を損失したこと）についてアプリケーションが通知されるときには、次いで、アプリケーションは、使用可能なネットワーク接続があるかどうかを見るように検査することになる。
【００４４】
[0050]  アプリケーションが１つ以上のトリガを登録した後（４０２）、また、写真が撮影されてデバイス（例えばカメラ・ロール）に格納されたときに、オペレーティング・システムは、新規の写真についてアプリケーションに通知する（４０４）。アプリケーションは、新規の写真について通知を受け取り（４０６）、続いて、新規の写真を検出し、新規の写真をアップロード・キューに追加する（４０８）。例えば、アプリケーションは、新規の写真をアップロード・キューにおいて新規のものと示し、つまり、クラウド・サービスに送信される準備ができている。
【００４５】
[0051]  新規の写真がアップロード・キューにおいて新規のものと一旦示されると、アプリケーションは、オペレーティング・システムを用いてＡＰＩを介して、ネットワークを活性化し、新規の写真のアップロードを試行する（４１０）。これには、デバイスのネットワーク・リソースを使用することができる（４１２）。しかしながら、デバモオかしながら、デバイスがネットワーク接続を損失する場合は、このシナリオに示されるように、新規の写真をアップロードする試行よりも前に（４１０）、アップロードの試行は失敗することになる。アップロードに失敗した場合は、オペレーティング・システムは失敗指示をアプリケーションに通信する（４１４）。アプリケーションは、新規のコンテンツをアップロードしたことの失敗について、失敗の理由（例えば、どのエラーのタイプが失敗を引き起こしたのか）と共にレポートすることができる。例えば、アプリケーションにはネットワーク変更のトリガが登録されているので、オペレーティング・システムは、失敗がＷｅｂＥｒｒｏｒＳｔａｔｕｓ．ＯｐｅｒａｔｉｏｎＣａｎｃｅｌｅｄのような既知のネットワーク・エラーによって引き起こされたということをレポートすることができる。
【００４６】
[0052]  幾らかの例の中には、アプリケーションが失敗指示を受け取ると（４１６）、アプリケーションはネットワーク障害の指示を格納するものもある。次いで、アプリケーションは、既知のネットワーク・エラーを検出し、写真をエラーがないものと示し、そして、アップロード・キューをポーズすることができる（４１８）。例えば、アプリケーションが失敗指示をオペレーティング・システムから受け取ると、失敗指示は、ネットワーク接続エラーのようなエラー・タイプを含む。アプリケーションは、受け取ったエラー・タイプを検査することができる。そして、エラーがネットワーク接続エラーである場合は、アプリケーションは、オペレーティング・システムと通信することによってネットワークの現在の状態を検査し、使用可能なネットワーク接続がない場合はアップロード・キューをポーズする。有利なことに、アプリケーションはまた、失敗したコンテンツを新規のものと示すことにより、失敗したコンテンツをアップロード・キューに戻すようにプットする（例えば、現在のコンテンツ・アップロード）ことができる。それ故、デバイスがネットワーク接続を回復すると、以前に失敗したコンテンツは新規のものと示され、自動的にアップロードされることになる。
【００４７】
[0053]  様々な例では、使用可能なネットワーク接続がないことを判断した後にアップロード・キューをポーズするのに替えて、アプリケーションは、ネットワーク・エラーがあることを示すエラー・メッセージをユーザに送ることができる。また、エラーを修復するために、ユーザはネットワークに接続しなければならない。次いで、ユーザがネットワークに接続した場合に、アプリケーションはアップロード・キューをポーズ解除することにより、コンテンツのアップロードを再び試行することができる。
【００４８】
[0054]  アップロードをポーズすることには、アップロード・キューをポーズ状態に設定することが含まれる。ここでは、新規のコンテンツであることが示された場合でもアップロードの試行は実行されないことになる。アップロードをポーズ解除することには、アップロード・キューを非ポーズ状態に設定することが含まれる。ここでは、新規のコンテンツであることが示された場合にアップロードの試行が実行される。アプリケーションは、多様な方法でアップロード・キューをポーズ状態に設定することができる。例えば、アプリケーションはポーズ・ビットまたはフラグを格納してもよく、アップロード・キューがポーズされるかポーズ解除されるかについて示す。
【００４９】
[0055]  このシナリオに示されるように、ネットワークがなおも接続されていない間にも、デバイスによって新規の写真が撮影され保存される。次いで、オペレーティング・システムは、新規の写真についてアプリケーションに通知し（４２０）、また、アプリケーションは新規の写真についての通知を受け取る（４２２）。次いで、アプリケーションは、新規の写真を検出し、新規の写真をアップロード・キューに追加することができる（４２４）。この場合、アップロード・キューはポーズされているので、新規のコンテンツをアップロードするのにアプリケーションによる試行は行われない。
【００５０】
[0056]  デバイスがネットワーク接続を回復すると、オペレーティング・システムは、ネットワーク接続の変更についてアプリケーションに通知することができる（４２６）。前述したように、アプリケーションが、例えばネットワーク変更のトリガを介して、ネットワーク接続変更の通知を受け取ると（４２８）、アプリケーションはネットワーク接続のステータスを検出することによって、使用可能なネットワーク接続があるかについて検査する（４３０）。これには、使用可能なネットワーク接続を確認するためにオペレーティング・システムと通信することが含まれる。ネットワーク接続が回復済みであるので、アプリケーションは使用可能なネットワーク接続を検出し、アップロード・キューをポーズ解除する（４３２）。アプリケーションは、オペレーティング・システムを用いてＡＰＩを介し、ネットワークを活性化し、アップロード・キューに新規の写真を再びアップロードすることを試行する（４３４）。
【００５１】
[0057]  図４Ｂを参照すると、アプリケーションは、オペレーティング・システムによって１つ以上のトリガを登録することができ（４５２）、新規のコンテンツがあること、またはネットワーク接続の状態が変更したことを、より詳しくは、コンピューティング・デバイスが接続性を損失または獲得したときに通知される。このシナリオに示すように、アプリケーションが１つ以上のトリガを登録した後（４５２）、デバイスがネットワーク接続を損失した場合に、オペレーティング・システムは、アプリケーションにネットワーク接続の変更を通知する（４５４）。
【００５２】
[0058]  アプリケーションは、オペレーティング・システムからネットワーク接続の変更の通知を受け取ることができ（４５６）、次いで、引き続いて、オペレーティング・システムと通信して使用可能なネットワーク接続がないことを確認することによって、ネットワーク接続のステータスを検出する（４５８）。幾らかの例の中には、前述したように、使用可能なネットワーク接続がないことを判断した後に、アプリケーションは、ネットワーク・エラーがあること、およびそのエラーを修復する方法を示したエラー・メッセージをユーザに送ることができるものもある。次いで、ユーザがエラーを修復してネットワークに接続する場合に、アプリケーションは、アップロード・キューを非ポーズ状態に設定することによって、コンテンツのアップロードを再開する。
【００５３】
[0059]  ネットワーク接続がないことをアプリケーションが一旦検出すると、次いで、アプリケーションは、前述した方法の何れかを使用して、アップロード・キューをポーズすることができる（４６０）。アップロード・キューがポーズ状態にあるときは、新規のコンテンツであることがアップロード・キューにおいて示されている場合でも、アップロードの試行が実行されることはない。
【００５４】
[0060]  このシナリオに示されるように、ネットワーク接続がない間に、写真が撮影されてシステムに格納される場合は、オペレーティング・システムは新規の写真についてアプリケーションに通知することになる（４６２）。アプリケーションが新規の写真についての通知を受け取ると（４６４）、次いで、アプリケーションは、新規の写真を検出して、新規の写真をアップロード・キューに追加することができる（４６６）。しかしながら、アップロード・キューがポーズ状態であるので、新規の写真がアップロード・キューに追加することはできるが、新規の写真をアップロードする試行はなされないことになる。
【００５５】
[0061]  このシナリオに示されるように、デバイスがネットワーク接続を回復すると、オペレーティング・システムは、ネットワーク接続変更についてアプリケーションに通知し（４６８）、アプリケーションはネットワーク変更通知を受け取る（４７０）。アプリケーションがネットワーク変更についての通知を受け取ると（４７０）、すぐに、アプリケーションは、オペレーティング・システムと通信して使用可能なネットワーク接続があることを確認することによって、ネットワーク接続のステータスを検出し（４７２）、また、アップロード・キューをポーズ解除する（４７４）。アップロード・キューが一旦非ポーズ状態になると、アプリケーションはアップロード・キューに以前に追加されていた新規の写真のアップロードを試みる（４７６）。
【００５６】
[0062]  図５を参照する。リソース使用量の削減は、ネットワーク接続の損失に加えて、多様な失敗状態の事態に対しても使用することができる。プロセス５００の間、アプリケーションは失敗状態の存在を検出する。アプリケーションは多様な方法で失敗状態を検出する。前述したように、例えば、アプリケーションは、コンテンツ変更のトリガおよびネットワーク変更のトリガのようなトリガを登録する。別の例として、アプリケーションはスレッドを起動させ、引き続き、オペレーティング・システムによって最初に通知されることなく失敗状態の存在を検出する。
【００５７】
[0063]  アプリケーションがオペレーティング・システムから或る種のトリガを受け取るように登録しているデバイスが失敗状態に入った場合に、オペレーティング・システムは状態変更についてアプリケーションに通知することができる（５０５）。幾らかの場合の中には、失敗状態であることがアプリケーションによって識別される条件であり、失敗状態であることはデバイス・エラーではないというものもある。例えば、（コンテンツをアップロードするためにアプリケーションが通信する）サーバが特定のユーザのためのクォータを超えていることが原因で、失敗状態が生じることがある。例えば、５ＧＢのストレージのように、クラウド・ストレージがユーザごとにストレージ容量を制限する場合は、ユーザはクラウド・ストレージ内に割り当てられたストレージ空間を満たし、これにより失敗状態を引き起こすことがある。失敗状態が生じるときについての別の例は、クラウド・ストレージに対するユーザのパスワードの有効期限が切れた場合である。
【００５８】
[0064]
アプリケーションは、オペレーティング・システムから状態変更の通知を受け取り（５１０）、次いで、オペレーティング・システムと通信して失敗状態であることを確認することによって、状態変更のステータスを検出することができる（５１５）。失敗状態があることをアプリケーションが一旦検出すると、次いで、アプリケーションは、前述の方法のいずれかによって、アップロード・キューをポーズすることができる（５２０）。アップロード・キューがポーズ状態にあるときは、新規のコンテンツであることがアップロード・キューにおいて示されている場合でも、アップロードの試行が実行されることはない。
【００５９】
[0065]  様々な例では、オペレーティング・システムから状態変化の通知を受け取り、失敗状態であることを確認し、アップロード・キューをポーズ状態に設定した後に、アプリケーションは、ユーザ・インタフェースを通じてユーザとエラー・メッセージを通信する。エラー・メッセージは、失敗状態であることのタイプと、失敗状態を修復する方法とを示す。ユーザが失敗状態を修復することを選択する場合に、オペレーティング・システムとの通信を再開してアプリケーションは、アップロード・キューを非ポーズ状態に設定することによって、アップロード・キューのコンテントを送信することができる。
【００６０】
[0066]  このシナリオに示されるように、デバイスがなおも失敗状態にある間、新規のコンテンツが作成されてシステムに格納することができる。新規のコンテンツは、これらに限定されないが、保存済みのファイル、写真、スクリーンショット等を含む。次いで、オペレーティング・システムは、新規のコンテンツについてアプリケーションに通知する（５２５）。アプリケーションが新規のコンテンツについての通知を受け取ると（５３０）、次いで、アプリケーションは、新規のコンテンツを検出し、新規のコンテンツをアップロード・キューに追加し（５３５）、そして、アップロード・キューのポーズ状態を検査することができる（５４０）。アップロード・キューはポーズ状態にあるので、新規のコンテンツはアップロード・キューに追加されるが、新規の写真をアップロードする試行は実施されることがない。
【００６１】
[0067]  このシナリオに示されるように、デバイスが成功状態に戻ると、オペレーティング・システムは、状態変更についてアプリケーションに通知し（５４５）、アプリケーションは、状態変更についての通知を受け取ることができる（５５０）。アプリケーションが状態変更の通知を受け取ると（５５０）、すぐに、アプリケーションは、オペレーティング・システムと通信して成功状態であることを確認することによって、状態変更のステータスを検出し（５５５）、次いで、アップロード・キューをポーズ解除することができる（５６０）。アップロード・キューが一旦非ポーズ状態になると、アプリケーションは、オペレーティング・システムを用いてＡＰＩを介し、ネットワークを活性化して、アップロード・キューに以前に追加した新規のコンテンツのアップロードを試行する（５６５）。
【００６２】
[0068]  図６は、リソース使用量の削減の適用を組み込んだアプリケーションについての例示のユーザ・インタフェースを示す。図６を参照する。ユーザは、ＵＩ６０２のようなユーザ・インタフェース（ＵＩ）を通じて、図１に説明されたように、アプリ１１６のようなアプリケーションを起動しているコンピューティング・デバイス６００と相互作用して、ユーザ入力を入力し、表示された出力を受けることができる。
【００６３】
[0069]  コンピューティング・デバイス（例えば、コンピューティング・デバイス６００）は、例えば、キーボード、マウス、トラック・パッド、タッチ・パッド、タッチ・スクリーン、マイクロフォン、カメラ、視線追跡装置、または他の入力デバイスを通じて、ユーザから入力を受け取るように構成される。ＵＩによって、ユーザは、コンピューティング・デバイス６００上で起動し、コンピューティング・デバイス６００を通じて表示される様々なアプリケーションと相互作用するのを可能にする。ＵＩは、通常、ユーザがアプリケーションの機能と容易に相互作用できるように構成される。例えば、ユーザは、コンピューティング・デバイス６００の動作を実行するために、ＵＩ内の選択肢（例えば、キャンセル・コマンド６２０またはネットワーク設定コマンド６１５）を、（例えば、タッチ、クリック、ジェスチャ、または音声を介して）単に選択するのみでよい。
【００６４】
[0070]  図示されるように、アプリケーション（例えばアプリ１１６）は、ネットワーク接続がない、またはクラウド・ストレージがいっぱいであるというような失敗状態についてユーザに知らせるＵＩ（例えば、ＵＩ６１０）をユーザに提供する。ユーザは、失敗状態に基づいて、失敗を修復するのを選ぶことができる。例えば、図示されたネットワーク接続失敗の場合、アプリケーションを実装するコンピューティング・デバイス６００は、ユーザにＵＩ６１０を提供する。ＵＩ６１０は、ネットワーク・エラーがであるためにアップロードの試行が失敗したことのメッセージと、失敗を訂正する方法とをユーザに表示する。例えば、図６に図示されるように、コンピューティング・デバイス６００がネットワーク接続を損失する場合は、ユーザはコンピューティング・デバイス６００のカメラによって写真を撮影し、ＵＩ６０２が有するカメラ・ロールのような最近の写真セクション６０５で写真を閲覧するときに、ユーザには、エラー・メッセージ６２５を表示するＵＩ６１０が提供されるのがよい。エラー・メッセージ６２５は、「写真のアップロードのエラー：ネットワーク接続なし」、および「アップロードを続けるには：ネットワークへの接続する」を表明する。
【００６５】
[0071]  幾らかの場合の中には、エラー・メッセージ６２５と共に、ネットワーク設定コマンド６１５が提供されて、ユーザが、コンピューティング・デバイス６００におけるネットワーク設定を変更するのを可能にするものもある。例えば、ＷｉーＦｉに接続する、またはアプリケーションがアップロード・キューにおいてコンテンツをアップロードするのを可能にする設定を変更する。ユーザはネットワーク接続の損失を修復する場合に、アプリケーションはアップロード・キューを非ポーズ状態に設定することにより、コンテンツのアップロードを再開する。幾らかの場合の中には、ユーザがネットワーク設定の変更を望まない場合に、ユーザは、キャンセル・コマンド６２０を選択し、また、コンピューティング・デバイス６００がネットワーク接続を獲得するまでアップロード・キューはポーズされたままとなるものもある。図示されるＵＩ６０２は、アプリケーションのＵＩ６０２をブロックし、ユーザの相互作用を求めるエラー・メッセージＵＩ６１０を示している。但し、エラー・メッセージＵＩ６１０は受動的なＵＩとしてよく、アップロードがポーズされること、および／またはエラーがあることをユーザに通知するのに使用される。受動的なＵＩについて幾らかの実装態様の中には、ハイパー・リンクが受動的なＵＩに含まれて、ユーザがエラーを訂正することができる部分を示唆するものもある。勿論、ハイパー・リンクはまた、アクティブＵＩに含まれてよい。
【００６６】
[0072]  図７は、本明細書に説明される特定の実装態様で使用されるコンピューティング・デバイスのコンポーネントについて示すブロック図である。システム７００は、単一のコンピューティング・デバイス内に実装されてもよく、或いは、プログラム命令を実行するのに協働する複数のコンピューティング・デバイスまたはサブ・システムにわたって分散されてもよい。システム７００は、これらに限定されないが、パーソナル・コンピュータ、タブレット・コンピュータ、リーダ、モバイル・デバイス、パーソナル・デジタル・アシスタント、ウェアラブル・コンピュータ、スマートフォン、ラップトップ・コンピュータ（ノートブックまたはネットブック）、ゲーミング・デバイス若しくはコンソール、デスクトップ・コンピュータ、またはスマート・テレビジョンを含んだ無数のコンピューティング・デバイスを実装するのに使用することができる。したがって、システム７００に関して説明される構成要素が、多かれ少なかれ特定のコンピューティング・デバイスを実装するために組み込まれてもよい。
【００６７】
[0073]  システム７００は、例えば、デバイスのオペレーティング・システム（ＯＳ）７１５と相互作用する１つ以上のアプリケーション・プログラム７１０の命令に従ってデータを処理するプロセッサ７０５を含む。プロセッサ７０５の例には、汎用中央処理ユニット、専用プロセッサ、および論理デバイスが、他の任意のタイプの処理デバイス、およびそれらの組合せまたは変更形態と共に含まれる。
【００６８】
[0074]  アプリケーション・プログラム７１０、ＯＳ７１５、および他のソフトウェアは、ストレージ・システム７２０にロードされ、格納される。デバイスのオペレーティング・システム７１５は、通常、コンピューティング・デバイス内の様々なコンポーネントの機能を制御および調整し、これにより、アプリケーションが、ネットワーキング・インターフェースのような低レベル・インタフェースと接続する更に簡単な手法を提供する。オペレーティング・システムの非限定的な例には、Ｍｉｃｒｏｓｏｆｔ社からのＷＩＮＤＯＷＳ（登録商標）、Ａｐｐｌｅ社からのＩＯＳ、Ｇｏｏｇｌ社からのＡＮＤＲＯＩＤＯＳ、Ｍｉｃｒｏｓｏｆｔ社からのＷＩＮＤＯＷＳＲＴ、およびＣａｎｏｎｉｃａｌからのＵｂｕｎｔｕのようなＬｉｎｕｘＯＳが含まれる。
【００６９】
[0075]  なお、ＯＳ７１５は、コンピューティング・デバイス上、およびネイティブのデバイスＯＳの上位で起動するソフトウェアの仮想化レイヤ上で何れもネイティブに実装されることに留意されたい。仮想化ＯＳレイヤは、図７には示されていないが、それぞれがＯＳ、アプリケーション・プログラム、およびＡＰＩを含んだ、ＯＳ７１５空間内で付加的にネストされたグルーピングと考えることができる。アプリケーション・プログラム７１０は、ＡＰＩを介してシステム７００の特定の機能にアクセスすることができる。
【００７０】
[0076]  ＡＰＩは、プログラム・コード・コンポーネントまたはハードウェア・コンポーネント（以下「ＡＰＩ実装コンポーネント」という。）によって実装されるインタフェースであり、異なるプログラム・コード・コンポーネントまたはハードウェア・コンポーネント（以下、「ＡＰＩ呼出コンポーネント」という。）が１つ以上の関数、メソッド、プロシージャ、データ構造、クラス、および／またはＡＰＩ実装コンポーネントによって提供される他のサービスにアクセスおよび使用するのを可能にする。ＡＰＩは、ＡＰＩ呼出コンポーネントとＡＰＩ実装コンポーネントとの間でパースされる１つ以上のパラメータを定義することができる。
【００７１】
[0077]  ＡＰＩは、ＡＰＩ呼出コンポーネントの開発者（サードパーティの開発者でもよい。）がＡＰＩ実装コンポーネントによって提供される指定されたフィーチャーをレバレッジするのを可能にする。１つのＡＰＩ呼出コンポーネントがあってもよく、または、２つ以上のそのようなコンポーネントがあってもよい。ＡＰＩは、コンピュータ・システムまたはプログラム・ライブラリが提供するソース・コード・インタフェースとすることができ、アプリケーションへのサービスの要求をサポートする。オペレーティング・システムが複数のＡＰＩを有することができて、オペレーティング・システム上で起動しているアプリケーションが、それらＡＰＩの１つ以上を呼び出すのを可能にする。また、サービス（例えば、プログラム・ライブラリ）が複数のＡＰＩを有することができ、サービスを使用するアプリケーションが、それらＡＰＩの１つ以上を呼び出すのを可能にする。ＡＰＩは、アプリケーションがビルドされるときにインタープリットまたはコンパイルすることができるプログラミング言語の観点から指定することができる。
【００７２】
[0078]  幾らかの実装態様の中には、ＡＰＩ実装コンポーネントは２つ以上のＡＰＩを提供するものもあり、各ＡＰＩは、異なる態様についての、または異なる態様によって異なる観点を提供する。異なる態様は、ＡＰＩ実装コンポーネントによって実装される異なる態様の機能にアクセスする。たとえば、ＡＰＩ実装コンポーネントが有する１つのＡＰＩが第１セットの関数を提供し、また、サードパーティの開発者に公表することができる。更に、ＡＰＩ実装コンポーネントが有する別のＡＰＩを隠蔽（非公表に）して、第１セットの機能のサブセットを提供し、第１セットの機能にはない機能をテストまたはデバッグするような別のセットの機能を提供することもできる。他の場合では、ＡＰＩ実装コンポーネントはそれ自体で、下にあるＡＰＩを介して１つ以上の他のコンポーネントを呼び出してもよく、つまり、ＡＰＩ呼出コンポーネントおよびＡＰＩ実装コンポーネントの両方とすることができる。
【００７３】
[0079]  ＡＰＩは、ＡＰＩ呼出コンポーネントがＡＰＩ実装コンポーネントにおいて指定されたフィーチャーにアクセスして使用するときに用いる言語およびパラメータを規定する。例えば、ＡＰＩ呼出コンポーネントは、ＡＰＩによって公表される１つ以上のＡＰＩ呼び出しまたは起動（例えば、関数またはメソッドの呼び出しによって具現化される。）を通じて、ＡＰＩ実装コンポーネントにおいて指定されたフィーチャーにアクセスし、また、ＡＰＩ呼び出しまたは起動を介してパラメータを使用するデータや制御情報を通過させる。ＡＰＩ実装コンポーネントは、ＡＰＩ呼出コンポーネントからのＡＰＩ呼び出しに応答して、ＡＰＩを通して値を返す。ＡＰＩが構文およびＡＰＩ呼び出し（例えば、ＡＰＩ呼び出しを起動する方法およびＡＰＩ呼び出しが実施するもの）の結果を規定する一方、ＡＰＩは、ＡＰＩ呼び出しによって指定される関数をＡＰＩ呼び出しがどのように完遂するかについては公表しない。様々なＡＰＩ呼び出しが、呼び出し側（ＡＰＩ呼出コンポーネント）およびＡＰＩ実装コンポーネントの間で、１つ以上のアプリケーション・プログラミング・インターフェースを介して転送される。ＡＰＩ呼び出しの転送は、関数の呼び出しまたはメッセージについての発行、開始、起動、呼び出し、受け取り、戻し、または応答を含む。換言すれば、転送は、ＡＰＩ呼出コンポーネントまたはＡＰＩ実装コンポーネントのいずれかによるアクションを記述することができる。ＡＰＩにおける関数の呼出または他の起動は、パラメータ・リストまたは他の構造を通じて１つ以上のパラメータを送り、または受け取る。
【００７４】
[0080]  更に、データのタイプまたはクラスは、ＡＰＩによって提供され、ＡＰＩ実装コンポーネントによって実装される。つまり、ＡＰＩ呼出コンポーネントは、ＡＰＩで提供される定義を使用することによって、変数を宣言し、このようなタイプまたはクラスの定数値へのポインタを使用し、当該定数値を使用またはインスタンス化する。
【００７５】
[0081]  通常、ＡＰＩが使用されることで、ＡＰＩ実装コンポーネントによって提供されるサービスまたはデータにアクセスすることができ、または、ＡＰＩ実装コンポーネントによって提供される動作または計算の実行を開始することができる。一例では、ＡＰＩ実装コンポーネントおよびＡＰＩ呼出コンポーネントはそれぞれ、オペレーティング・システム、ライブラリ、デバイス・ドライバ、ＡＰＩ、アプリケーション・プログラム、または他のモジュールのうちの任意の１つでよい（なお、ＡＰＩ実装コンポーネントおよびＡＰＩ呼出コンポーネントは、相互に同一または相違するタイプのモジュールとしてもよいことが理解されるべきである。）。ＡＰＩ実装コンポーネントは、ファームウェア、マイクロコード、または他のハードウェア・ロジックにおいて少なくとも部分的に具現化される場合もある。ＡＰＩによって、クライアント・プログラムが、ソフトウェア開発キット（ＳＤＫ）ライブラリによって提供されるサービスを使用するのを可能にする場合もある。他にも、アプリケーションまたは他のクライアント・プログラムは、アプリケーション・フレームワークによって提供されるＡＰＩを使用してもよい場合もある。ここで、アプリケーションまたはクライアント・プログラムは、ＳＤＫによって提供され、また、ＡＰＩによって提供される関数若しくはメソッドへの呼び出しを組み込んでもよく、または、ＳＤＫにおいて定義されＡＰＩによって提供されるデータのタイプ若しくはオブジェクトを使用してもよい。アプリケーション・フレームワークは、例えば、フレームワークによって定義される様々なイベントに応答するプログラムに対し、メイン・イベント・ループを提供してもよい。ＡＰＩによって、アプリケーションが、アプリケーション・フレームワークを使用して、イベントと該イベントへの応答とを指定するのを可能にする。幾らかの実装態様の中には、ＡＰＩ呼び出しは、ハードウェア・デバイスの性能または状態をアプリケーションにレポートすることができるものもある。当該性能または状態には、入力性能および状態、出力性能および状態、処理性能、電力状態、ストレージ性能および状態、通信性能等のような態様に関係するものを含む。また、ＡＰＩは、ファームウェア、マイクロコード、またはハードウェア・コンポーネント上で部分的に実行する他の下位のロジックによって部分的に実装されるものもある。
【００７６】
[0082]  ＡＰＩ呼出コンポーネントは、ローカル・コンポーネントでもよい（すなわち、ＡＰＩ実装コンポーネントと同一のデータ処理システム上にある。）。またはＡＰＩ呼出コンポーネントは、ネットワーク（例えば、ネットワーク１５５）を通じてＡＰＩを介してＡＰＩ実装コンポーネントと通信するリモート・コンポーネントでもよい（すなわち、ＡＰＩ実装コンポーネントとは異なるデータ処理システム上にある。）。ＡＰＩ実装コンポーネントはまた、ＡＰＩ呼出コンポーネントとしても振る舞ってもよく（すなわち、異なるＡＰＩ実装コンポーネントによって公表されたＡＰＩに対してＡＰＩ呼び出しを行ってもよい。）。ＡＰＩ呼出コンポーネントはまた、異なるＡＰＩ呼出コンポーネントに公表されるＡＰＩを実装することによって、ＡＰＩ実装コンポーネントとして振る舞ってもよい。
【００７７】
[0083]  ＡＰＩによって、異なるプログラミング言語で記述された複数のＡＰＩ呼出コンポーネントが、ＡＰＩ実装コンポーネントと通信するのを可能にする（つまり、ＡＰＩは、ＡＰＩ実装コンポーネントおよびＡＰＩ呼出コンポーネントの間で呼び出しおよび戻り値を変換するためのフィーチャーを含む。）。しかしながら、ＡＰＩは特定のプログラミング言語で実装されてもよい。ＡＰＩ呼出コンポーネントには、異なるプロバイダからのＡＰＩを呼び出すことができる場合もある。当該ＡＰＩとは、例えば、オペレーティング・システムのプロバイダからのＡＰＩのセットと、プラグ・イン・プロバイダからの別のＡＰＩのセットと、別のプロバイダ（例えば、ソフトウェア・ライブラリのプロバイダ）または別のＡＰＩのセットのクリエータからの当該別のＡＰＩのセットとである。
【００７８】
[0084]  ＡＰＩ、ＡＰＩ実装コンポーネント、およびＡＰＩ呼出コンポーネントは、ストレージ・システム７２０に格納される。
【００７９】
[0085]  ストレージ・システム７２０は、プロセッサ７０５によって読み取り可能であり、ソフトウェア（例えば、アプリケーション・プログラム７１０およびＯＳ７１５）を格納することが可能な任意のコンピュータ可読ストレージ媒体を含む。
【００８０】
[0086]  ストレージ・システム７２０は、コンピュータ可読命令、データ構造、プログラム・モジュール、または他のデータのような情報を記憶するための任意の方法または技術で実装される揮発性および不揮発性の、取り外し可能および取り外し不能な媒体を含んでもよい。ストレージ媒体の例には、ランダム・アクセス・メモリ、リード・オンリ・メモリ、磁気ディスク、光ディスク、フラッシュ・メモリ、仮想メモリおよび非仮想メモリ、磁気セット、磁気テープ、磁気ディスク・ストレージ、若しくは他の磁気ストレージ・デバイス、または他の任意の適切なストレージ媒体が含まれる。いかなる場合でも、ストレージ媒体は伝搬信号ではない。ストレージ媒体に加えて、幾らかの実装態様では、ストレージ・システム７２０はまた、ソフトウェアが内部または外部と通信される通信媒体を含んでもよい。ストレージ・システム７２０は、単一のストレージ・デバイスとして実装されてもよいが、一緒に配置されるか、または相互に分散された複数のストレージ・デバイスまたはサブ・システムにわたって実装されてもよい。ストレージ・システム７２０は、プロセッサ７０５と通信する性能を有する、コントローラのような付加的な構成要素を備えてもよい。
【００８１】
[0087]  様々な実装態様において、システム７００を介して格納されたデータ／情報は、デバイスにローカルに格納されるキャッシュ７２５のようなデータ・キャッシュを含んでもよい。或いは、データは、通信インタフェース７３５を介して、またはデバイスと該デバイスに関連付けられる別個のコンピューティング・デバイス（インターネットのような分散型のコンピューティング・ネットワーク内のサーバ・コンピュータ）との間の有線接続を介して、デバイスによってアクセスされる任意の数のストレージ媒体上に格納されてもよい。このようなデータ／情報は、ネットワーク／通信インタフェース７３５または分散型コンピューティング・ネットワークを介して、デバイスを通じてアクセスされることが認められて然るべきである。同様に、このようなデータ／情報は、電子メールおよび協働データ／情報共有システムを含んだ公知のデータ／情報転送およびストレージ手段に従い、ストレージおよび使用のためにコンピューティング・デバイス間で容易に転送される。
【００８２】
[0088]  ソフトウェアは、プログラム命令で実装され、他の機能の中でも、システム７００全体、特にプロセッサ７０５によって実行されると、本明細書に説明されるように動作するようにシステム７００またはプロセッサ７０５に指令を行う。ソフトウェアは、オペレーティング・システム・ソフトウェアまたは他のアプリケーション・ソフトウェアのような追加の処理、プログラムまたはコンポーネントを含んでもよい。ソフトウェアはまた、ファームウェア、またはプロセッサ７０５によって実行可能な他の何らかの形態のマシン可読処理命令も含んでもよい。
【００８３】
[0089]  通常、ソフトウェアは、プロセッサ７０５にロードされ、そして実行されると、コンピューティング・システム７００全体を、汎用コンピューティング・システムから専用コンピューティング・システムに変換する。専用コンピューティング・システムは、リソース使用量の削減を容易にするようにカスタマイズされる。実際のところ、ストレージ・システム７２０上でのソフトウェアのエンコードにより、ストレージ・システム７２０の物理構造を変換する。物理構造についての特定の変換は、この説明の異なる実装態様における様々な要因に依存する。このような要因の例には、これらに限定されないが、ストレージ・システム７２０が有するストレージ媒体を実装するのに使用される技術、およびコンピュータ・ストレージ媒体がプライマリまたはセカンダリのストレージとして特徴付けられるが含まれる。
【００８４】
[0090]  例えば、コンピュータ・ストレージ媒体が半導体ベース・メモリとして実装されている場合は、プログラムが半導体メモリ内でエンコードされているときには、例えばトランジスタ、コンデンサ、または半導体メモリを構成する他の個別の回路素子の状態を変換することによって、ソフトウェアは半導体メモリの物理的状態を変換する。同様の変換は、磁気媒体または光学媒体に関しても生じる。物理媒体における他の変換は、この説明を容易にするためにのみ提供された前述の例によって、本説明の範囲から逸脱しない範囲で可能である。
【００８５】
[0091]  これに替えて、またはこれに加えて、本明細書に記載される機能、メソッド、およびプロセスは、少なくとも部分的には、１つ以上のハードウェア・モジュール（または論理コンポーネント）によって実装することができる。例えば、ハードウェア・モジュールは、これらに限定されないが、特定用途向け集積回路（ＡＳＩＣ）チップ、フィールド・プログラマブル・ゲートアレイ（ＦＰＧＡ）、システム・オン・チップ（ＳｏＣ）システム、コンプレックス・プログラマブル・ロジック・デバイス（ＣＰＬＤ）、および今や公知のまたは最近開発中の他のプログラマブル・ロジック・デバイスを含むことができる。ハードウェア・モジュールが活性化されると、ハードウェア・モジュールは、該ハードウェア・モジュール内に含まれる機能、メソッド、およびプロセスを実行する。
【００８６】
[0092]  なお、システム７００の多くの構成要素がシステム・オン・チップ（ＳｏＣ）デバイスに含まれてもよいことに留意されたい。これらの構成要素は、これらに限定されないが、プロセッサ７０５、ネットワーク／通信インタフェース７３５、オーディオ・インタフェース７４０、ビデオ・インタフェース７４５、更にはストレージ・システム７２０の要素さえも含んでもよい。
【００８７】
[0093]  ネットワーク／通信インタフェース７３５は、通信接続およびデバイスを含み、１つ以上の通信ネットワーク（図示せず）を通じて他のコンピューティング・システムとの通信を可能にする。システム間の通信を共に可能にする接続およびデバイスの例には、ネットワーク・インタフェース・カード、アンテナ、電力増幅器、ＲＦ回路、トランシーバ、および他の通信回路が含まれる。接続およびデバイスは、他のコンピューティング・システムまたはシステムのネットワークとの通信を交換するために、通信媒体（例えば、金属、ガラス、空気、または他の任意の適切な通信媒体）を介して通信する。ネットワーク／通信インタフェース７３５との間の送受信は、ＯＳ７１５によって制御され、必要なときにアプリケーションおよびＡＰＩに通信イベントを通知する。
【００８８】
[0094]  インタフェース・デバイス７５０は、カメラ７５５、マウス（不図示）、トラック・パッド（不図示）、キーボード（不図示）、マイクロフォン（不図示）、ユーザからタッチ・ジェスチャを受けるためのタッチ・デバイス（図示せず）、ユーザによる非タッチ・ジェスチャおよび他のモーションを検出するためのモーション入力デバイス（不図示）、並びに、他の種別の入力デバイスおよびそれらに関連する、ユーザ入力を受け取ることができる処理要素のような入力デバイスを含む。
【００８９】
[0095]  インタフェース・デバイス７５０はまた、ディスプレイ・スクリーン（不図示）、スピーカ（不図示）、触覚フィードバックのための触覚デバイス、および他のタイプの出力デバイスのような出力デバイスを含む。特定の場合に、入力デバイスおよび出力デバイスは、イメージを描画すると共にユーザからのタッチ・ジェスチャ入力を受け取るタッチスクリーン・ディスプレイのような単一のデバイスに組み合わされるものもある。視覚的出力は、多様な方法でディスプレイ上に描画され、グラフィカル・ユーザ・インタフェース要素、テキスト、画像、ビデオ、通知、仮想ボタン、仮想キーボード、または視覚的な形態で描画することができる他の任意のタイプの情報を提示する。他の種類のユーザ・インタフェースが可能である。ユーザ・インタフェース７５０はまた、様々なユーザ入力および出力デバイスをサポートするためにＯＳ７１５によって実行される、関連のユーザ・インタフェース・ソフトウェアを含んでもよい。このようなソフトウェアはＯＳを支援し、定義済みのメカニズムを使用して、ユーザ・インタフェース・ハードウェア・イベントをアプリケーション・プログラム７１０に通信する。
【００９０】
[0096]  なお、システム７００を実装する任意のモバイルまたはデスクトップ・コンピューティング・デバイスは、追加の特徴または機能性を有してもよく、本明細書に説明される構成には限定されないことが理解されるべきである。
【００９１】
[0097]  本発明の特定の態様は、非限定的な以下の実施形態を提供する。
【００９２】
[0098]  例１
コンピューティング・デバイス上で起動するアプリケーションによるリソース使用量を削減する方法であり、コンピューティング・デバイスで受け取ったコンテンツをクラウド・サービスに送信するためにアップロード・キューをコンピューティング・デバイスにおいて管理するステップと、アップロード・キューが非ポーズ状態となるかまたはポーズ状態となるかが示されることを含む、アップロード・キューの状態を検査するステップと、アップロード・キューの状態を検査した後、アップロード・キューが非ポーズ状態となることが示される間に、コンピューティング・デバイスにおいて、コンピューティング・デバイスのネットワーク・リソースを使用して、アップロード・キューにおいて新規なものと示されるコンテンツをクラウド・サービスに送信することによって、アップロード・プロセスを実行するステップと、ネットワーク接続の損失とネットワーク接続の可用性とについてのネットワーク接続の変更を検出するステップであって、ネットワーク接続の損失の検出に応じて、アップロード・キューがポーズ状態に設定される、ステップと、を含む。ネットワーク接続を検出するステップは、アップロード・キューにおける新規のコンテンツに応答して、コンテンツをアップロードする処理の外部で生じる。
【００９３】
[0099]  例２
例１の方法であって、更に、新規のコンテンツを検出するステップと、新規のコンテンツの検出に応じて、新規のコンテンツをアップロード・キューにおいて新規なものと示すステップと、アップロード・キューがポーズ状態である場合に、新規のコンテンツをクラウド・サービスに送信するようにはオペレーティング・システムと通信しないステップと、アップロード・キューが非ポーズ状態である場合に、新規のコンテンツをクラウド・サービスに送信するようにオペレーティング・システムと通信するステップと、を含む。
【００９４】
[0100]  例３
例１または例２の方法において、ネットワークの変更を検出するステップが、アップロード・キューにおいて新規なものと示されるコンテンツのクラウド・サービスへの送信に失敗したことの失敗指示を受け取るステップであって、失敗指示がネットワーク接続エラーを示す、ステップを含む。
【００９５】
[0101]  例４
例１から例３の何れかの方法であって、更に、ネットワーク接続の変更を通知するトリガを受け取ることを、オペレーティング・システムによって登録するステップを含み、ネットワーク接続の変更を検出するステップが、ネットワーク接続の変更の通知を受け取ることを含む。
【００９６】
[0102]  例５
例１から例４の何れかの方法において、アップロード・キューを管理するステップが、新規のコンテンツの検出に応じて、新規のコンテンツをアップロード・キューで新規のものと示すステップと、新規のコンテンツのクラウド・サービスへの送信に成功した場合に、新規のコンテンツを、アップロード・キューで送信済みのものと示すステップと、を含む。
【００９７】
[0103]  例６
例１から例５の何れかの方法において、ネットワーク接続の可用性の検出に応じて、アップロード・キューが非ポーズ状態に設定される。
【００９８】
[0104]  例７
例１から例６の何れかの方法において、コンテンツが、写真、スクリーンショット、および保存済みファイルのうち少なくとも１つを含む。
【００９９】
[0105]  例８
システムであって、処理システムと、１つ以上のコンピュータ可読ストレージ媒体と、１つ以上のコンピュータ可読ストレージ媒体上に格納されるアップロード・キューと、１つ以上のコンピュータ可読ストレージ媒体上に格納されるオペレーティング・システムと、１つ以上のコンピュータ可読ストレージ媒体上に格納されるプログラム命令で具現化されるアプリケーションであって、処理システムによって実施されると、処理システムに、少なくとも、コンテンツをクラウド・サービスに送信するためにアップロード・キューを管理し、アップロード・キューが非ポーズ状態となるかポーズ状態となるかが示されることを含む、アップロード・キューの状態を検査し、アップロード・キューの状態を検査した後であり、アップロード・キューが非ポーズ状態となることが示されている間に、コンピューティング・デバイスのネットワーク・リソースを使用して、アップロード・キューにおいて新規なものと示されるコンテンツをクラウド・サービスに送信することによって、アップロード・プロセスを実行し、失敗状態および成功状態の状態変更を検出し、失敗状態の検出に応じて、アップロード・キューが非ポーズ状態に設定されるように指令する、アプリケーションと、を備える。ネットワーク接続の検出は、アップロード・キューの新規のコンテンツに応じて、コンテンツをアップロードするプロセスの外部で生じる。
【０１００】
[0106]  例９
例８のシステムにおいて、１つ以上のコンピュータ可読ストレージ媒体上に格納されるプログラム命令が、更に、処理システムに、新規のコンテンツの検出に応じて、新規のコンテンツをアップロード・キューにおいて新規なものと示し、アップロード・キューがポーズ状態である場合は、新規のコンテンツをクラウド・サービスに送信するようには、オペレーティング・システムと通信せず、アップロード・キューが非ポーズ状態である場合は、新規のコンテンツをクラウド・サービスに送信するように、オペレーティング・システムと通信するように指令する。
【０１０１】
[0107]  例１０
例８または例９のシステムにおいて、処理システムに、失敗状態および成功状態の状態変更を検出するように指令する命令が、処理システムに少なくとも、アップロード・キューにおいて新規なものと示されるコンテンツのクラウド・サービスへの送信に失敗したことの失敗指示を受け取るように指令し、失敗指示が既知のネットワーク接続エラーを示す。
【０１０２】
[0108]  例１１
例８から例１０の何れかのシステムにおいて、処理システムに、失敗状態および成功状態の状態変更を検出するように指令する命令が、処理システムに少なくとも、状態変更を通知するトリガを受け取ることを、オペレーティング・システムによって登録し、状態変更の通知を受け取るように指令する。
【０１０３】
[0109]  例１２
例８から例１１の何れかのシステムにおいて、処理システムに、アップロード・キューを管理するように指令する命令が、処理システムに少なくとも、新規のコンテンツをアップロード・キューにおいて新規のものと示し、新規のコンテンツのクラウド・サービスへの送信に成功した場合に、新規のコンテンツをアップロード・キューにおいて送信済みのものと示すように指令する。
【０１０４】
[0110]  例１３
例８から例１２の何れかのシステムにおいて、成功状態の検出に応じて、アップロード・キューが非ポーズ状態に設定される。
【０１０５】
[0111]  例１４
例８から例１３の何れかのシステムにおいて、コンテンツが、写真、スクリーンショット、および保存済みファイルのうち少なくとも１つを含む。
【０１０６】
[0112]  例１５
アプリケーションを有する１つ以上のコンピュータ可読ストレージ媒体であって、処理システムによって実施されると、処理システムに、コンピューティング・デバイスで受け取ったコンテンツをクラウド・サービスに送信するためにアップロード・キューを、コンピューティング・デバイスにおいて管理するステップと、アップロード・キューの状態を検査するステップであって、アップロード・キューが非ポーズ状態となるかポーズ状態となるが示されることを含むステップと、アップロード・キューの状態を検査した後であり、アップロード・キューが非ポーズ状態となることが示されている間に、コンピューティング・デバイスにおいて、コンピューティング・デバイスのネットワーク・リソースを使用して、アップロード・キューにおいて新規なものと示されるコンテンツをクラウド・サービスに送信することによって、アップロード・プロセスを実行するステップと、ネットワーク接続の損失とネットワーク接続の可用性とについてのネットワーク接続の変更を検出するステップであって、ネットワーク接続の損失の検出に応じて、アップロード・キューがポーズ状態に設定される、ステップと、を含む方法を実行するように指令する。ネットワーク接続の検出は、アップロード・キューの新規のコンテンツに応じて、コンテンツをアップロードするプロセスの外部で生じる。
【０１０７】
[0113]  例１６
例１５の媒体であって、更に、新規のコンテンツを検出するステップと、新規のコンテンツの検出に応じて、新規のコンテンツをアップロード・キューにおいて新規なものと示すステップと、アップロード・キューがポーズ状態である場合は、新規のコンテンツをクラウド・サービスに送信するようには、オペレーティング・システムと通信しないステップと、アップロード・キューが非ポーズ状態である場合は、新規のコンテンツをクラウド・サービスに送信するように、オペレーティング・システムと通信するステップと、を含む。
【０１０８】
[0114]  例１７
例１５または例１６の媒体において、ネットワークの変更を検出するステップが、アップロード・キューにおいて新規なものと示されるコンテンツのクラウド・サービスへの送信に失敗したことの失敗指示を受け取るステップであって、失敗指示がネットワーク接続エラーを示す、ステップを含む。
【０１０９】
[0115]  例１８
例１５から例１７の何れかの媒体において、ネットワークの変更を検出するステップが、ネットワーク接続の変更を通知するトリガを受け取ることを、オペレーティング・システムによって登録するステップと、ネットワーク接続の変更の通知を受け取るステップと、を含む。
【０１１０】
[0116]  例１９
例１５から例１８の何れかの媒体において、アップロード・キューを管理するステップが、新規のコンテンツを検出したのに応じて、新規のコンテンツをアップロード・キューにおいて新規のものと示すステップと、新規のコンテンツのクラウド・サービスへの送信に成功した場合に、新規のコンテンツをアップロード・キューにおいて送信済みのものと示すステップと、を含む。
【０１１１】
[0117]  例２０
例１５から１９の媒体において、ネットワーク接続の可用性を検出したのに応じて、アップロード・キューが火ポーズ状態に設定される。
【０１１２】
[0118]
本明細書に説明された例および実施形態は例示目的にすぎず、それらを考慮した様々な修正態様または変更態様が当業者に示唆されることになり、また、本出願の主旨および範囲内に含まれることになることが理解されるべきである。
【０１１３】
[0119]
構造的特徴および／または行為に特有の言語で主題について説明されたが、添付の特許請求の範囲に規定された主題は、必ずしも前述の特定の特徴または行為に限定されないことが理解されるべきである。寧ろ、上記の特定の特徴および行為は、特許請求の範囲を実施する例示として開示され、他の均等な特徴および行為が特許請求の範囲内となることが意図される。
【図１】
2019536173.tif 000003
【図２】
2019536173.tif 000004
【図３】
2019536173.tif 000005
【図４Ａ】
2019536173.tif 000006
【図４Ｂ】
2019536173.tif 000007
【図５】
2019536173.tif 000008
【図６】
2019536173.tif 000009
【図７】
2019536173.tif 000010
【国際調査報告】
2019536173.tif 000011
2019536173.tif 000012