我正在开发一个获取远程后台获取(又名静默通知)的应用程序.
我所做的是使用Mvx.Resolve解析服务,通过网络进行提取.当应用程序启动并投入后台时它工作正常 - 但由于它不保证它保持在那里(低内存或人们强制关闭所有后台应用程序),因此MvvmCross不再初始化,我需要初始化它当应用程序被唤醒时
但是我当时似乎不能运行Setup()和setup.Initialize(),因为Setup构造函数需要一个UIWindow(当后台启动时将会为null)并且解析null会抛出异常.
我知道Android有一个单例类,可以确保MvvmCross可用,如下所示:
var setupSingleton = MvxAndroidSetupSingleton.EnsureSingletonAvailable(this);
setupSingleton.EnsureInitialized();
Run Code Online (Sandbox Code Playgroud)
但我似乎无法在iOS平台上找到这样的东西.Setup类有一个方法EnsureInitialized(),但仍然需要我通过安装构造函数,这需要一个UIWindow,如前所述.
谁能告诉我这样做的方法?一种解决方案是仅手动初始化所需的服务.但这似乎是一个糟糕的解决方案,因为某些服务可能需要通过MvvmCross Ioc加载其他服务.
谢谢
程序员大家好
我正在使用Xamarin(iOS)在应用程序中实现下载功能,以获得正在下载的文件的进度.
我使用的代码是来自网络各处的各种示例,显示相同的主体,编码风格的最大区别.它们都在System.IO.File上使用相同的ReadAsync和WriteAsync函数,并使用字节数组作为缓冲区.
但无论我转向什么样的例子,它都会导致图片上出现不同的文物,如下所示:

(原始/下载)
我似乎无法找到任何理由发生这种情况.我尝试了不同的东西,看看有什么可以触发这个.我发现将缓冲区更改为更大的大小(比如10240)会导致更多的伪像,而更小的缓冲区(比如1024)会导致更少的伪像.
在调试不同的东西时,我找到了"避免"这种情况发生的"方法",但这包括在WriteAsync刚完成后立即添加一个任务延迟,持续20毫秒(在代码中注释掉) - 不是我想要的解决方案有,但告诉问题可能在于两个流的使用(据我所知,'仅限'基本用法').我也尝试使用非异步方法,但给出了相同的结果.
希望有人能告诉我这里做错了什么,以及为什么.
提前致谢
public async Task<bool> MakeDownloadRequestAsync(string url, string destination, Action<string, long, long, float> progress = null) {
if (_downloadHttpClient == null) {
_downloadHttpClient = new HttpClient (new NativeMessageHandler());
}
bool finished = false;
try {
var result = await _downloadHttpClient.GetAsync(url, HttpCompletionOption.ResponseHeadersRead);
long receivedBytes = 0;
long totalBytes = result.Content.Headers.ContentLength.HasValue ? result.Content.Headers.ContentLength.Value : 0;
System.Diagnostics.Debug.WriteLine ("Started download file: {0}", url);
using (var stream = await _downloadHttpClient.GetStreamAsync (url))
{
byte[] buffer = new …Run Code Online (Sandbox Code Playgroud)