2017-04-15 54 views
2

私はnavigatetoロジックで接続された複数のページを持つアプリを持っています。UWPページのライフサイクル

ページの1つにウェブカムバインディングのメディア要素が含まれています。バックグラウンドモードに入った後(たとえば、システムメニューをクリックしてアプリの考えを最小化するなど)、カメラ要素が停止しました。したがって、私は
Windows.ApplicationModel.Core.CoreApplication.LeavingBackgroundイベントを購読し、カメラを再初期化します。現在のページがこのサブスクリプションとカメラ要素のページであれば、すべてが問題ありません。現在のページが別のページで、アプリケーションが復元されている場合、LeavingBackgroundはこのイベントが発生するため、隠されたページはカメラを再初期化しようとします。

私はthis.NavigationCacheMode = NavigationCacheMode.Disabledを設定しようとしました。メディア要素を含むページのインスタンスとLeavingBackgroundイベントのサブスクリプションは、MSDNに従ってNavigatedToイベントの後に理論的に破棄する必要があります。しかし、それは私が理解していない他の方法です。

カメラのページが一度インスタンス化され、永遠に、LeavingBackgoundイベントが常に受信されるようです - それは私にとっては悪いことです。

Window.Current.Content.GetType()とカメラ要素を含むページのタイプを比較しようとしましたが、このタイプには別のページのタイプが含まれることがありますが、Content.Contentでシフトされることもあります。 。同様に、

public sealed partial class WebCamPage 
{ 
    public WebCamPage() 
    { 
     InitializeComponent(); 
    } 

    protected override void OnNavigatedTo(NavigationEventArgs e) 
    { 
     Windows.ApplicationModel.Core.CoreApplication.LeavingBackground += OnLeavingBackground; 
    } 

    protected override void OnNavigatingFrom(NavigatingCancelEventArgs e) 
    { 
     Windows.ApplicationModel.Core.CoreApplication.LeavingBackground -= OnLeavingBackground; 
    } 

    private void OnLeavingBackground(object sender, LeavingBackgroundEventArgs e) 
    { 
     // Your code here. 
    } 
} 

答えて

3

私はあなたがそのページから離れてナビゲートするイベントハンドラの登録を解除する必要が引き受けますそれは、カメラのサンプルアプリに示されている:

https://github.com/Microsoft/Windows-universal-samples/blob/master/Samples/CameraStarterKit/cs/MainPage.xaml.cs

おかげで、 ステファンウィック - Windowsの開発プラットフォームを

+0

それは私が試みた回避策の1つですが、私はそれがエレガントで正確ではないと思います。私はまだページが処分されない理由を理解していません。 –

+2

静的イベントハンドラはアクティブな参照を保持しているため、静的イベント(LeavingBackgroundなど)を購読している限り、ページは廃棄されません。これは、メモリ診断ツールを使用して確認できます。 –

+0

私のページではありません。エレガントでなく、本当に複雑すぎるあなたのデザインです。しかし、私は確信している、あなたはそれを変更する努力はありません。 –

1

あなたは一時停止を処理するために必要とクリーンアップをするために、イベントを再開し、カメラを正しく再初期化:

+0

これらのイベントは私の場合は全く役に立ちません。私の質問を理解してください。 –

+1

サスペンド/レジュームは、バックグラウンドに出入りするときに発砲するイベントです。他のシナリオでは、システムはアプリを一時停止または再開します。カメラのサンプルを見てください。 –

+0

さて、それを試してみましょう。 –

関連する問題