このページは役に立ちましたか。
このページのコンテンツについての ご意見をお待ちしております
その他にご意見はありますか。
残り 1500 文字
エクスポート (0) 印刷
すべて展開
情報
要求されたトピックは次のとおりです。しかし、このトピックはこのライブラリには含まれていません。

低メモリの電話で Windows Phone 8 用のアプリの機能を無効にする方法

2014/06/18

対象: Windows Phone OS 7.1

 

低メモリ デバイス で実行するアプリを作成するとき、そのアプリの機能によって大量のメモリが消費される場合や、アプリで汎用バックグラウンド エージェントを使用する場合には、アプリを実行するデバイスのメモリ ワーキング セットを調べたうえで、バックグラウンド エージェントまたは大量のメモリを消費しているその他の機能を無効にすることができます。このトピックでは、その具体的な方法の一例を示します。

メモリ制限の検出とアプリ動作の変更

  1. デバイスが低メモリ デバイス であるかどうかを示す値を格納するためのプロパティを宣言します。通常、この値はアプリ設定に保存します。

    private static bool isLowMemDeviceValue;
    public static bool IsLowMemDevice
    {
        get
        {
            if (IsolatedStorageSettings.ApplicationSettings.Contains("IsLowMemDevice"))
                isLowMemDeviceValue = (bool)IsolatedStorageSettings.ApplicationSettings["IsLowMemDevice"];
            return isLowMemDeviceValue;
        }
        set {
            if (value != IsLowMemDevice)
                IsolatedStorageSettings.ApplicationSettings["IsLowMemDevice"] = value;
        }
    }
    
  2. デバイスのアプリ メモリ制限をチェックします。それには、GetValue(String) を呼び出して、ApplicationWorkingSetLimit を渡します。このメソッドは、デバイスのアプリ メモリ制限を表す long 値を返します。

  3. GetValue(String) メソッドの戻り値が 90 MB (94371840) 未満かどうかを調べます。そうである場合、デバイスは低メモリ デバイス です。

  4. GetValue(String) の呼び出しを try/catch ブロックにラップします。ユーザーがデバイスを Windows Phone オペレーティング システムの最新バージョンにアップグレードしておらず、この呼び出しがデバイスでサポートされていないため、ArgumentOutOfRangeException が発生する可能性があります。

    メモメモ:

    GetValue(String) の呼び出しでは、デバイス ID 機能 ID_CAP_IDENTITY_DEVICE が必要な場合があり、アプリケーションで DeviceExtendedProperties クラスを使用している場合、アプリの統合中にこの機能が追加されます。ただし、GetValue(String) メソッドを使用して ApplicationWorkingSetLimit を取得すると、アプリ統合の前にアプリのマニフェスト ファイルからデバイス ID 機能を削除することにより、この機能を除外できます。そうすれば、この機能は統合プロセスで追加されません。

  5. GetValue(String) メソッドの結果に応じて、最初のステップで宣言したプロパティを設定します。アプリ起動時に上記のステップ 2 ~ 5 を実行するコード例を次に示します。

    private void Application_Launching(object sender, LaunchingEventArgs e)
    {
        try
        {
            // Check the working set limit and set the IsLowMemDevice flag accordingly.
            Int64 result = (Int64)DeviceExtendedProperties.GetValue("ApplicationWorkingSetLimit");
            if (result < 94371840L)
                MainPage.IsLowMemDevice = true;
            else
                MainPage.IsLowMemDevice = false;
        }
        catch (ArgumentOutOfRangeException)
        {
            // Windows Phone OS update not installed, which indicates a 512-MB device.
             MainPage.IsLowMemDevice = false;
        }
    }
    
  6. 保存した値を使用してコード パスを変更したり、メモリ制限を超過する機能や、低メモリ デバイス でサポートされない機能を除外します。OnNavigatedPage メソッドのコードを次に示します。このコードはデバイスが低メモリ デバイス であるかどうかをチェックし、そうである場合、別の UI を表示します。その場合、バックグラウンド エージェントが実行されなくなります。

    protected override void OnNavigatedTo(System.Windows.Navigation.NavigationEventArgs e)
    {
        if (IsLowMemDevice)
            ShowMemPanel();
        else
        {
            periodicTask = ScheduledActionService.Find(periodicTaskName) as PeriodicTask;
            if (periodicTask != null)
            {
                PeriodicStackPanel.DataContext = periodicTask;
            }
            resourceIntensiveTask = ScheduledActionService.Find(resourceIntensiveTaskName) as ResourceIntensiveTask;
            if (resourceIntensiveTask != null)
            {
                ResourceIntensiveStackPanel.DataContext = resourceIntensiveTask;
            }
            ignoreCheckBoxEvents = false;
        }
    }
    
    private void ShowMemPanel()
    {
        // Hide the agent panels and show a simple panel with a textblock instead.
        // The user will not be able to start the background agents.
        MemTextBlock.Text = "Mem usage: " + DeviceStatus.ApplicationPeakMemoryUsage +
            "/" + DeviceStatus.ApplicationMemoryUsageLimit;
        MemStackPanel.Visibility = Visibility.Visible;
        PeriodicStackPanel.Visibility = Visibility.Collapsed;
        ResourceIntensiveStackPanel.Visibility = Visibility.Collapsed;
        ignoreCheckBoxEvents = true;
    }
    

表示:
© 2015 Microsoft