【问题标题】:Phone Hangs after taking Photo in xamarin.forms在 xamarin.forms 中拍照后手机挂起
【发布时间】:2019-11-07 22:07:27
【问题描述】:

所以我一直在开发一个 xamarin.forms 移动应用程序,其中一部分涉及拍照,它一直工作正常,但昨天突然拍照后手机开始挂起,这是没有新的代码更改当时。

这是一个仅针对 android 的 xamarin.forms 项目,在 pie 9.0 API 28 上运行 VS2019 内置模拟器

我花了很多时间试图解决这个问题,但我对移动开发非常陌生,我不知道是什么原因,似乎有些东西正在用新的分配淹没幼儿园内存,但我可以只要图像被拍摄并接受,控制台就会开始泛滥:

11-07 10:08:21.691 I/.co.lilleker_i(16426): Explicit concurrent copying GC freed 8770(448KB) AllocSpace objects, 0(0B) LOS objects, 49% free, 1623KB/3MB, paused 617us total 5.821ms
11-07 10:08:21.695 D/Mono    (16426): GC_TAR_BRIDGE bridges 1439 objects 1439 opaque 0 colors 1439 colors-bridged 1439 colors-visible 1439 xref 0 cache-hit 0 cache-semihit 0 cache-miss 0 setup 0.04ms tarjan 0.20ms scc-setup 0.14ms gather-xref 0.15ms xref-setup 0.02ms cleanup 0.06ms
11-07 10:08:21.695 D/Mono    (16426): GC_BRIDGE: Complete, was running for 15.62ms
11-07 10:08:21.695 D/Mono    (16426): GC_MINOR: (Nursery full) time 3.80ms, stw 4.91ms promoted 158K major size: 1680K in use: 912K los size: 1024K in use: 208K

这种情况每半秒发生一次,并且应用程序变得无响应,我已禁用在此之后运行的所有其他代码,因此运行以下方法:

 private async Task<Byte[]> GetPhoto()
    {
        try
        {
            await CrossMedia.Current.Initialize();

            if (!CrossMedia.Current.IsCameraAvailable || !CrossMedia.Current.IsTakePhotoSupported)
            {
                await DisplayAlert("No Camera", ": (No Camera available.", "OK");
                return null;
            }

            var file = await CrossMedia.Current.TakePhotoAsync(new Plugin.Media.Abstractions.StoreCameraMediaOptions
            {
                Directory = "Sample",
                Name = "test.jpg"
            });

            if (file == null)
                return null;

            await DisplayAlert("File Location", file.Path, "OK");

            return null;
        }
        catch(Exception ex)
        {
            string m = ex.Message;
            return null;
        }
    }

警报与路径一起显示,但之后它挂起(我什至无法关闭警报)

我在日志中发现的唯一可能存在问题的是以下行:

type=1400 audit(0.0:1494): avc: denied { link } for comm=54687265616420506F6F6C20576F72 name="PropertyStore.forms.tmp" dev="dm-1" ino=123214 scontext=u:r:untrusted_app:s0:c96,c256,c512,c768 tcontext=u:object_r:app_data_file:s0:c96,c256,c512,c768 tclass=file permissive=0

但我似乎无法找出这实际上意味着什么。任何帮助将不胜感激。

【问题讨论】:

  • 尝试删除共享项目和Android项目中的binobj文件夹。然后清理并重建它。
  • 不幸的是,这没有帮助。谢谢你的建议
  • 从您的代码看来,即使文件不是空值,GetPhoto() 方法也将始终返回空值。
  • 没错,它最初将照片转换为字节数组以发送到 Web api,但我在尝试找出导致问题的原因时删除了那部分代码。
  • 你能分享一个包含问题的样本吗,我会在我这边检查一下。

标签: c# android xamarin.forms


【解决方案1】:

好的,所以在被问及示例项目后,我创建了一个新项目并使用了确切的代码,却发现它突然没有这个问题。我花了一些时间试图看看有什么不同,只是注意到新创建的项目已经更新了 xamarin.forms 和 xamarin.essentials 包。

在对 nuget 进行了大量的捏造之后,我设法将我的应用程序升级为使用 Xamarin.Essentials 1.2.0 和 Xamarin.Forms 4.2.0.709249(与新项目模板使用的相同),现在问题已解决.

【讨论】:

  • 您可以接受您的回答,这将帮助更多的人。
猜你喜欢
  • 1970-01-01
  • 2021-08-09
  • 1970-01-01
  • 1970-01-01
  • 2014-03-29
  • 1970-01-01
  • 2015-05-10
  • 2011-06-08
  • 1970-01-01
相关资源
最近更新 更多