更新:我在设置 pLatOld = pLat 之前添加了计算,有些正在使用旧值,有些在恢复后使用 pLatOld 的新值。他们都应该使用旧值,这是他们第一次运行活动时所做的。看起来 Math 类代码使用了不正确的值,但仅在活动恢复后才使用。直接内联代码使用正确的值。有没有办法在代码中的其他所有内容都执行后,将旧的更新为新的?
我已经在 Google 和 stackoverflow 上搜索了执行顺序。大多数回复都涉及并行线程,但由于这是线性代码,所以它是一个更简单的问题,而且让我很困惑。我已经剥离了下面示例中的代码以简化我的调试。通常我会在设置 pLat 和更新 pLatOld 之间进行计算,这取决于这些读数之间的差异。它第一次工作正常,但在恢复之前的值也是新值之后,所以我的计算显示为 0 距离。
@Override
public void onLocationChanged(Location location) {
if (location != null)
{
pLat = location.getLatitude();
textData = (TextView)findViewById(R.id.textData);
DecimalFormat df = new DecimalFormat("#.########");
textData.setText(
"Lat " + df.format(pLat)
+"\npLatOld " + df.format(pLatOld)
);
pLatOld = pLat;
}
}
当我输入 38 后跟 38.1 时,我第一次可能会得到这个输出
Lat 38.1
pLatOld 38
这是对的。
但是,如果我离开页面并返回并做同样的事情,我会得到
Lat 38.1
pLatOld 38.1
这是错误的。
换句话说, pLatOld = pLat 似乎在它之前的代码之前执行。
我尝试添加虚拟计算,以便编译器知道我在设置 pLatOld 后使用它,但没有乐趣。