适用于Android的Xamarin - 异步:在活动生命周期的事件处理程序中使用“async”转到下一个事件处理程序

时间:2015-01-20 17:24:27

标签: xamarin async-await xamarin.android

当我们在活动生命周期中等待事件处理程序内的某些事情时,在执行" async"时会转到下一个事件处理程序。部分。

我们正在OnCreate(或OnStart)中做事,其中一些需要时间。因此,我们使用异步,以便在此期间使应用程序响应。 但是当我们这样做时,它跳转到OnResume部分。

虽然它确实完成了所需的所有工作,但这并不是我们需要它发生的方式。我们无法在OnCreate完成之前使OnResume发生

我们应该以不同的方式做到这一点吗?

1 个答案:

答案 0 :(得分:0)

欢迎来到async-xamarin的世界。基本Activity类代码不等待生命周期方法,因此,OnStart()OnResume()方法将在OnCreate()中正在等待的调用运行时被调用。最简单的方法是将所有代码保存在单个生命周期方法中

public class MyActivity : Activity
{
    private Data data;
    public async void OnCreate()
    {
        data = await getDataFromServerAsync();
        calculateValues(data);
        showValues(data);
    }
}

如果您需要跨方法拆分代码,则需要具有创造性。例如,如果您只需要在活动启动时从服务器加载数据,但每次活动恢复时它都需要使用本地数据更新显示,您可以检查是否已完成所有必需的预处理:

public class MyActivity : Activity
{
    private Data data;
    public async void OnCreate()
    {
        data = await getDataFromServerAsync();
        await calculateValuesIncludingLocalData(data); 
        showValues(data);
    }
    public void OnResume()
    {
        if(data != null)
        { 
            await calculateValuesIncludingLocalData(data);
            showValues(data);
        }
    }
}

请注意,单步执行此代码时会出现问题,因为async中的OnCreate()方法可以在您逐步完成OnResume()方法之前轻松完成。