低メモリの電話向けの Windows Phone 8 用のアプリ開発

2014/06/18

対象: Windows Phone 8 および Windows Phone Silverlight 8.1 | Windows Phone OS 7.1

 

アプリを広く配布するためには、アプリでのメモリ使用量を判断し、より低メモリのデバイスでもパフォーマンスよく動作するようにアプリを改変します。

  • Windows Phone 8 の場合は、メモリが 512 MB の電話を指します。

  • Windows Phone OS 7.1 の場合は、メモリが 256 MB の電話を指します。

Windows Phone SDK 8.0 を使用して、アプリを 256 MB と 512 MB の両方のバージョンの Windows Phone Emulator でテストできます。Windows Phone SDK 7.1.1 更新プログラム 以降のバージョンのツールを使用して、アプリが低メモリ デバイス 上で実行しているかどうかをコード内で検出し、必要に応じてアプリの機能の一部を無効にして、アプリの対象となる市場が最大化するようにできます。さらに、低メモリ デバイス 上でアプリが適切に機能しない場合は、アプリのマニフェスト ファイルに適切な変更を加えることで、Windows Phone ストア のこの電話カテゴリから除外することができます。

このトピックでは、電話のメモリを確認する方法について説明します。また、低メモリ デバイス でサポートされていない、またはサポートに制限のある、Windows Phone OS 7.1 の機能についても説明します。

このトピックは、次のセクションで構成されています。

 

Windows Phone SDK 8.0 または Windows Phone SDK 7.1.1 更新プログラム では、アプリをホストするデバイスのメモリ ワーキング セットの制限を確認し、サポートされていない、またはメモリの消費量が多いとわかったアプリの機能を無効にできます。メモリ ワーキング セットの制限を確認するには、GetValue(String) メソッドを呼び出し、ApplicationWorkingSetLimitpropertyName パラメーターとして渡します。その方法を次のコードに示します。

// Place call in a try block in case the user
// is not running a version of the Windows Phone OS
// that supports this method call.

try
    {
      long result =  
        (long)DeviceExtendedProperties.GetValue("ApplicationWorkingSetLimit");
    }

catch (ArgumentOutOfRangeException)
    {
      // The device does not support querying for this value. This occurs
      // on Windows Phone OS 7.1 and older phones without OS updates.
    }

次の表に、電話が低メモリ デバイス である場合に GetValue(String) メソッドによって返される値を OS バージョン別に示します。

OS バージョン

アプリ ワーキング セットの制限

Windows Phone 8 の既定の制限

150 MB (157286400)

Windows Phone 8 の高い制限

180 MB (188743680)

Windows Phone OS 7.1 

90 MB (94371840)

Windows Phone 8 のメモリ制限の詳細については、「Windows Phone 8 用のアプリのメモリ制限」を参照してください。

このようなメモリ制限内で実行するには、アプリ内で調整を行う必要のある場合があります。大量のメディア リソースを使用するアプリやゲームの場合は特に、ストア に申請する前に、アプリのメモリ使用量をテストすることをお勧めします。

注意注意:

GetValue(String) への呼び出しには、デバイス ID 機能 ID_CAP_IDENTITY_DEVICE を必要とすることがあります。ただし、GetValue(String) メソッドを使用して ApplicationWorkingSetLimit パラメーターを取得する場合は、アプリ マニフェストからデバイス ID 機能を削除することで、この機能を除外できます。詳細については、「アプリの機能を判断する方法」を参照してください。

Windows Phone 8 および Windows Phone OS 7.1 で提供されるほとんどの機能を低メモリ デバイス で使用できます。パフォーマンスの問題は発生しません。ただし、ジェネリック バックグラウンド エージェントは Windows Phone OS 7.1 の低メモリ デバイス でサポートされないため、アプリのメモリ上限を超えないよう、一部の追加機能は慎重に使用してください。

グラフィックおよびオーディオのメモリ使用量の低減

低メモリ デバイス で実行するアプリおよびゲームの開発時は、ゲームまたはアプリでのグラフィックを慎重に使用する必要があります。グラフィックおよびオーディオ メモリはほとんどページングできません。オーディオやイメージ リソース、テクスチャ、アニメーションを使用しすぎると、低メモリ デバイス のメモリ上限を超える可能性があります。これは、XNA Framework を使用してビルドされた、一般に多くのグラフィックやオーディオを使用するゲームで特に当てはまります。アプリまたはゲームが、実行中のデバイスのメモリ レベルを超えると、OutofMemoryException が発生し、アプリが予期せずに終了します。

グラフィック メモリの使用量が、デバイスに設定されたワーキング メモリ上限に近い場合、低メモリ デバイス で動作するよう、アプリのパフォーマンス調整を行ってください。この作業には、アプリのプロファイリングが役立ちます。詳細については、「Windows Phone のアプリ プロファイリング」を参照してください。

メモリの使用量を減らすためのその他の考慮事項

次のリストは、低メモリ デバイス で実行するアプリの開発についてのその他の考慮事項です。

  • 可能な場合はランチャーやセレクターを使用する。WebBrowser コントロール、マップ コントロール、またはカメラをアプリで使用する場合は、アプリで使用するメモリの量と、アプリが 256 MB Windows Phone Emulator でスムーズに動作するかどうかをテストしてください。アプリのメモリ負荷を軽減するには、これらのコントロールを、対応するランチャーとセレクターと共に使用します。Windows Phone でのランチャーの使用の詳細については、「Windows Phone のランチャー」および「Windows Phone のセレクター」を参照してください。

  • データのリストが長くならないようにする。長くなる場合は、ページングする。データを一括ではなく、必要に応じて読み込みます。

  • イメージを含む複雑なアイテム テンプレートの使用を避ける。それらを使用する場合、アプリのメモリ使用量を監視してください。

  • ページの切り替えで複雑なアニメーションを使用しない。これには、Windows Phone Toolkit 内の切り替えが含まれます。切り替えを使用する場合は、アプリの応答が継続していることを確認し、ページ切り替え中のアプリのメモリ使用量をテストしてください。

  • ユーザーが、アプリの実行中にデバイスの向きを変えた場合、アプリが使用するメモリが瞬間的に多くなる可能性があることに注意する。向きを変更したときのアプリをテストし、アプリが定期的に 90 MB のメモリ上限を超える場合、低メモリ デバイス を除外してください。

一般的なパフォーマンスのガイドライン、たとえば起動時間を短縮したり、ユーザーに進捗を報告する方法については、「Windows Phone 8 用アプリのパフォーマンス上の考慮事項」を参照してください。

対象: Windows Phone OS 7.1

 

Windows Phone OS 7.1 を対象とする低メモリ デバイス でサポートされていない機能は、ジェネリック バックグラウンド エージェントのみです。電話が低メモリ デバイス であっても、エージェントは Windows Phone 8 でサポートされます。電話が低メモリ デバイス である場合、次のエージェントは Windows Phone OS 7.1 ではサポートされません。

  • リソースを大量に消費するタスク

  • 定期的なタスク

これらのバックグラウンド エージェントのいずれかを、低メモリ デバイス または 256 MB エミュレーターのいずれかに、Add(ScheduledAction) メソッドを使用して PeriodicTask または ResourceIntensiveTask を渡してアプリケーションに追加しようとすると、InvalidOperationException 例外が発生します。

アプリでバックグラウンド エージェントを使用し、かつすべての種類のデバイスでアプリを実行させたい場合は、デバイスのワーキング メモリを確認して、低メモリ デバイス でバックグラウンド エージェントを使用しないようにする必要があります。たとえば、PeriodicTask コントロールを使用して、アプリのライブ タイルを更新する場合、低メモリ デバイス ではライブ タイルの更新を無効にして、静的なタイルのみを提供するようにします。この値の確認方法と、アプリの機能を一部無効にする方法の例については、「低メモリの電話で Windows Phone 8 用のアプリの機能を無効にする方法」を参照してください。

Windows Phone SDK 8.0 を使用して、アプリを 256 MB と 512 MB の両方のバージョンの Windows Phone で実行できます。Windows Phone SDK 8.0 をインストールした後、標準ツール バーの次のオプションから選択できます。

Target on Standard Toolbar selecting emulator

デバイスにアクセスできない場合は、低メモリ エミュレーターを使用すると、低メモリ デバイス でのアプリやゲームの応答とパフォーマンスを確認しやすくなります。

また、Windows Phone SDK に付属のツールを使用して、アプリのメモリ使用量を評価し、アプリのパフォーマンスを調整できます。

  • Windows パフォーマンス分析ツールを使用すると、メモリの使用量を表示し、アプリのパフォーマンスを調整できます。詳細については、「Windows Phone アプリケーションの分析」を参照してください。

  • Windows Phone ストア テスト キット 使用すると、アプリが使用するメモリの合計を評価できます。Windows Phone ストア テスト キット の詳細については、「Windows Phone ストア テスト キット」を参照してください。

アプリをテストし、低メモリ デバイス のメモリ制限内で実行できないとわかった場合は、その旨をアプリのマニフェスト ファイルに示す必要があります。これを行わないと、低メモリ デバイス のユーザーがアプリをダウンロードしてインストールしてしまう可能性があります。これにより低メモリ デバイス のユーザーによるアプリの評価が低くなる可能性があります。

開発しているアプリの対象として低メモリ デバイス を除外する場合は、マニフェストにセクションを追加して、アプリに追加のメモリが必要であることを示します。マニフェストのこのセクションは、ストア での受け入れ処理中には削除されません。

アプリ マニフェスト ファイルで低メモリ デバイス でアプリを利用できなくするには、以下の手順に従います。

  1. Requirements セクションを WMAppManifest.xml ファイルに追加します。

    Windows Phone 8 アプリの場合、Requirements セクションは ScreenResolutions セクションの直後に追加します。

    または

    Windows Phone OS 7.1 アプリの場合、Requirements セクションは Capabilities セクションの直後に追加します。

  2. Requirement 要素を Requirements セクションに追加します。

    Windows Phone 8 アプリの場合、この Requirement に対し、Name 属性値として ID_REQ_MEMORY_300 を指定します。

    または

    Windows Phone OS 7.1 アプリの場合、この Requirement に対し、Name 属性値として ID_REQ_MEMORY_90 を指定します。

その方法を次の例に示します。


<Requirements>
      <Requirement Name="ID_REQ_MEMORY_300" />
</Requirements>

Windows Phone OS 7.1 アプリがあり、Windows Phone 8 低メモリ デバイス を除外したい場合は、要件を ID_REQ_MEMORY_300 に設定します。ID_REQ_MEMORY_300 要件を設定すると、事実上 Windows Phone OS 7.1 低メモリ デバイス と Windows Phone 8 低メモリ デバイス の両方を除外できます。ID_REQ_MEMORY_90ID_REQ_MEMORY_300 の両方を指定する場合、ID_REQ_MEMORY_90 要件は無視されます。

表示:
© 2015 Microsoft