我搜索了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但没有快乐。
答案 0 :(得分:0)
首次执行pLatOld = pLat;
pLatOld
从pLat
获取38.1
的值。
因此,当它稍后执行时,预期输出为原样。