当我们在活动生命周期中等待事件处理程序内的某些事情时,在执行" async"时会转到下一个事件处理程序。部分。
我们正在OnCreate(或OnStart)中做事,其中一些需要时间。因此,我们使用异步,以便在此期间使应用程序响应。 但是当我们这样做时,它跳转到OnResume部分。
虽然它确实完成了所需的所有工作,但这并不是我们需要它发生的方式。我们无法在OnCreate完成之前使OnResume发生
我们应该以不同的方式做到这一点吗?
答案 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()
方法之前轻松完成。