当我们在活动生命周期中等待事件处理程序中的某些内容时,在执行"异步"部分时转到下一个事件处理程序。
我们在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
方法可以轻松完成。