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



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

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

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

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

欢迎来到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);
        }
    }
}

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

最新更新