处理掉电话后,WinPhone8 Camera API似乎继续运行

时间:2013-02-18 11:26:11

标签: c# windows-phone-7 xaml camera windows-phone-8

我正面临Camera API的严重问题,即使我知道在99.99%的情况下,框架也不应该受到责备,我开始考虑可能存在问题。在Windows手机中处理相机的方式。

问题

我的代码很简单,只有两个非常简单的页面:第一个是用于导航到第二个的按钮,它使用相机API并在屏幕上呈现预览缓冲区。在第一页上,我还添加了一个带有循环动画的矩形来旋转它,以强制应用程序更新帧速率。

个人资料会话的结果如下:

Test application lifecycle

只要我留在第一页,帧率计数器就会显示60fps的坚如磐石。一旦我启动了带摄像头的第二页,由于使用了系统摄像头,fps会下降。但是,当我按下后退键时,相机正确放置,但帧速率稍低(~53 fps)。 更令人印象深刻的是,图表数据显示某些内容仍在运行并损害了性能!内置分析告诉我系统应用程序使用47%的CPU,与显示相机页面时相同!

是否存在这种行为的原因?

我的代码

第二页的代码隐藏:

public partial class MyScannerView : PhoneApplicationPage {
    private PhotoCamera camera;

    public MyScannerView() {
        InitializeComponent();
    }

    protected override void OnNavigatedTo(NavigationEventArgs e) {
        base.OnNavigatedTo(e);

        camera = new PhotoCamera(CameraType.Primary);
        viewfinderBrush.SetSource(camera);
    }

    protected override void OnNavigatedFrom(NavigationEventArgs e) {
        base.OnNavigatedFrom(e);

        if (camera != null) {
            camera.Dispose();
            camera = null;
        }
    }
}

第二页的我的XAML:

<Canvas x:Name="viewfinderCanvas">
    <Canvas.Background>
        <VideoBrush x:Name="viewfinderBrush">
            <VideoBrush.RelativeTransform>
                <CompositeTransform x:Name="viewfinderTransform" CenterX="0.5" CenterY="0.5" />
            </VideoBrush.RelativeTransform>
        </VideoBrush>
    </Canvas.Background>
</Canvas>

1 个答案:

答案 0 :(得分:1)

我的应用程序有类似的问题,它使用相机。 使用非OnNavigatedFrom但OnNavigatingFrom覆盖并按此顺序执行操作来管理它:

  1. 取消订阅活动
  2. 的Dispose();
  3. camera = null;