拍完照片后,CrossMedia.Camera会回到主页面

时间:2017-09-11 11:52:52

标签: xamarin xamarin.forms

我在Xamarin Forms中使用Plugin.CrossMedia,有时候,在相机拍照后,应用程序会转回主页面,所有工作都会在实际页面中丢失,包括图像。这发生在Android(5和6)上。

我这样做:

if (!CrossMedia.Current.IsCameraAvailable || !CrossMedia.Current.IsTakePhotoSupported)
{
    return;
}

var photoName= "photo.png";
var sizeImg= Plugin.Media.Abstractions.PhotoSize.Small;
var mediaOptions = new Plugin.Media.Abstractions.StoreCameraMediaOptions
{
    SaveToAlbum = false,
    AllowCropping = true,
    DefaultCamera = Plugin.Media.Abstractions.CameraDevice.Rear,
    Name = photoName,
    PhotoSize = sizeImg
};

using (var file = await CrossMedia.Current.TakePhotoAsync(mediaOptions))
{
    if (file == null)
        return;

    var filePath = file.Path;

      ... move image

}

1 个答案:

答案 0 :(得分:3)

当操作系统需要内存来执行应用程序的请求时,在这种情况下使用摄像头,重新启动Activity会在低端设备上出现;有限的内存,Android One和新的基于Oreo的Android Go设备。

Xamarin.Forms在一个Activity内运行(通常是模板创建的MainActivity)及其应用程序&页面生命周期事件在活动的生命周期事件中映射。

Xamarin.Forms'终止:

  

请注意,没有应用程序终止的方法。在正常情况下(即不是崩溃),应用程序终止将发生在OnSleep状态,而不会向您的代码发送任何其他通知。

回复:Forms' Lifecycle Methods

要遵循的一些做法:

  • 描述应用的内存使用情况

  • 确保您正在发布不再需要的资源,图像通常应用程序中最大的内存使用者

  • 通过创建虚拟Service并从Android操作系统请求ImportanceReason.ServiceInUse,在启动外部应用时请求更高的应用重要性。

    Note: This does not prevent the OS from terminating your process,
          it provides another hint to the OS...
    
  • 打开外部应用程序(如相机,Chrome通过自定义标签(Xamarin.Auth)等等...并且用户希望返回相同状态时,请确保您已保留应用程序的状态状态,以便你可以恢复它。

  • 阅读Android's Activity Lifecycle,以便在使用OnCreate调用活动Bundle时,您知道您的应用正在重新启动,并且您可以检索并传递某些特定于应用的状态表单的Application子类的信息,用于确定要重建的Forms导航堆栈以及要打开的页面,即:

    if (bundle is null)
        LoadApplication(new App());
    else
    {
        var restoreAppState = GetPriorAppState();
        LoadApplication(new App(restoreAppState.Restore2Page));
    }