相同"而"循环代码在不同的Android设备上提供不同的结果(可怕)

时间:2018-01-25 23:57:29

标签: android while-loop cpu

此处更新:

到目前为止暴露问题的设备(输出160):

  • 魅族M2 Note; CPU Mediatek MT6753; Android 5.1;根:没有
  • Doogee Leo DG280; CPU Mediatek MT6582; Android 4.4.2;根:没有

============

我在 DooGee Leo LG280 上发生了一个非常奇怪的while循环行为。

在我测试的每个仿真器和手机上,此循环的输出为60。我可以运行100次,结果总是60次。

代码:

public class JavaActivity extends AppCompatActivity {
  @Override public void onCreate(@Nullable Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    int limitValue = 50;
    int result = startWeirdLoop(limitValue);

    System.out.println("my weird loop in java " + result);
    ((TextView)findViewById(R.id.textView)).setText(String.valueOf(result));
  }

  private int startWeirdLoop(int limitValue) {
    int index = 0;
    while (index <= limitValue) {
      index += 20;
    }
    return index;
  }
}

如果您在上面列出的设备上运行相同的代码,则输出为160。

为了让它输出正确的值(60),到目前为止我尝试了一些事情:

  1. 只需在循环中添加一个空的print语句
  2. 中的limitValue硬编码,而则将其替换为50.
  3. 将参数Integer
  4. 中的int替换为limitValue
  5. 在while中翻转条件:while (limitValue >= index)
  6. 将limitValue添加0:while (index <= limitValue + 0)
  7. 这对我来说真的没有意义!为什么System.out.println(&#34;&#34;)应该神奇地修复while循环的结果?为什么硬编码参数也应该修复它?最重要的是,为什么这只发生在这台设备上?

    似乎添加到循环中的任何指令都会使循环按预期工作。这让我感到害怕。

    它可能与CPU(MediaTek MT6582 ARM Cortex-A7)有关吗?到系统版本?我不知道,但这真让我生气,因为它只发生在这个设备上,我害怕它可能在其他人身上。我再说一遍,在仿真器和Huawey,LG,三星设备上工作正常。

    我在这里唯一的疑问是与组合CPU&lt; - &gt;有关。 Android Runtime ART。如果你有这款型号的手机或其他配备MT6582的手机,请尝试运行此代码。

    截图:

    1 2

    在DooGee设备上运行检测测试(以避免任何与布局相关的问题)

    3 4

0 个答案:

没有答案