此处更新:
到目前为止暴露问题的设备(输出160):
============
我在 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),到目前为止我尝试了一些事情:
limitValue
硬编码,而则将其替换为50. Integer
int
替换为limitValue
while (limitValue >= index)
while (index <= limitValue + 0)
这对我来说真的没有意义!为什么System.out.println(&#34;&#34;)应该神奇地修复while循环的结果?为什么硬编码参数也应该修复它?最重要的是,为什么这只发生在这台设备上?
似乎添加到循环中的任何指令都会使循环按预期工作。这让我感到害怕。
它可能与CPU(MediaTek MT6582 ARM Cortex-A7)有关吗?到系统版本?我不知道,但这真让我生气,因为它只发生在这个设备上,我害怕它可能在其他人身上。我再说一遍,在仿真器和Huawey,LG,三星设备上工作正常。
我在这里唯一的疑问是与组合CPU&lt; - &gt;有关。 Android Runtime ART。如果你有这款型号的手机或其他配备MT6582的手机,请尝试运行此代码。
截图:
在DooGee设备上运行检测测试(以避免任何与布局相关的问题)