0

更新:我在设置 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 后使用它,但没有乐趣。

4

1 回答 1

0

你的第一次pLatOld = pLat;被执行pLatOld时,它的值来自pLatis 38.1

因此,当稍后执行时,输出是预期的。

于 2012-07-15T16:29:53.733 回答