【发布时间】: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项目中的
bin和obj文件夹。然后清理并重建它。 -
不幸的是,这没有帮助。谢谢你的建议
-
从您的代码看来,即使文件不是空值,
GetPhoto()方法也将始终返回空值。 -
没错,它最初将照片转换为字节数组以发送到 Web api,但我在尝试找出导致问题的原因时删除了那部分代码。
-
你能分享一个包含问题的样本吗,我会在我这边检查一下。
标签: c# android xamarin.forms