Android8.0 对重复代码行的处理

问题

public class MainActivity extends AppCompatActivity {
public static String TAG ="TAG";
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //四行重复代码
        Log.d(TAG, "onCreate: ");
        Log.d(TAG, "onCreate: ");
        Log.d(TAG, "onCreate: ");
        Log.d(TAG, "onCreate: ");

    }
}

如果用Android8.0系统执行上述代码,会只有两行输出,debug的话四行都会输出。改成for循环的重复输出也是同样的,只输出两行就停止输出了。

问题发现

我在复习RxJava的操作符的时候,测试了这么段代码

Observable.create(new ObservableOnSubscribe<Integer>() {
            @Override
            public void subscribe(ObservableEmitter<Integer> emitter) throws Exception {
                emitter.onNext(1);
                emitter.onNext(2);
                emitter.onNext(3);
            }
        }).map(new Function<Integer, String>() {
            @Override
            public String apply(Integer integer) throws Exception {
                return "result " + integer;
            }
        }).subscribe(new Consumer<String>() {
            @Override
            public void accept(String s) throws Exception {
                Log.d(TAG, s);
            }
        });

按理说应该输出0 1 2 三次,我发现随便怎么搞,在同一线程里,我都无法完整输出。然后我切换线程又可以执行。
然后我就找了半天Rxjava的问题,发现并不是。我发现只要改成不一样的代码就可以执行,而且只要在相同的代码超过两行再插入一行不同的代码,也可以执行,所以我试着把代码移除来在onCreate中执行,发现也是一样的,所以排除了Rxjava的原因。
那难道是编译器原因?我更新了也没用,最后没办法,让朋友帮忙测试下,发现别人的可以,而环境与我不同的只有模拟器他是低于Android8.0的,于是我自己重新装了个7.0的模拟器,可以顺利运行。我又测试了其他几台机器,也是一样。
我有点纳闷了,这难道是Android8.0的优化么,可能是我学识不够。我个人觉得这样的优化未免太激进了,只要相同的代码超过两行就不执行了,这有点扯犊子了,debug下又可以运行。找了很多原因也难找到。

猜你喜欢

转载自blog.csdn.net/HJsir/article/details/80451141
今日推荐