ANR in Java oder Kotlin

  • Antworten:3
  • OffenNicht stickyNicht beantwortet
  • Forum-Beiträge: 855

03.02.2019, 11:56:42 via Website

Hallo liebes Forum.
Ich bin etwas Überrascht ich wollte mal die Coroutinen in Kotlin ausprobieren.

Dazu wollte ich eine ANR erzeugen.

Nun bin ich total verwundert das ich mit diesem Code weder in Java noch in Kotlin eine ANR erzeugen kann. Was unter alten Versionen immer ging. Weis einer warum das nicht mehr geht.
Ich halte doch den UI Thread wirklich lange an, ist der Compiler mittlerweile wirklich so schlau geworden das er so was selber in Threads packt.
Weder im Emulator noch auf einem echten Gerät, kann ich somit eine ANR Provozieren.

Button bt = (Button) findViewById(R.id.button1);
    bt.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            //new Warten().tt();

            long ft = System.currentTimeMillis() + 50000;
            while (System.currentTimeMillis() < ft) {
                synchronized (this) {
                    try {
                        wait(ft - System.currentTimeMillis());
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                }
            }

            TextView text = findViewById(R.id.text1);
            text.setText(("neuer Text"));


        }
    });
Diskutiere mit!
Pascal P.
  • Mod
  • Blogger
  • Forum-Beiträge: 10.628

03.02.2019, 12:14:49 via Website

Also ich bekomme mit deinem Code nach 10 sek eine ANR.
Das ist allerdings merkwürdig, denn laut Google ist sollte das bei 5 Sek der Fall sein:
https://developer.android.com/topic/performance/vitals/anr

Ich habs jetzt nich in einen ClickListener gepackt aber, das sollte nicht viel Unterschied machen.
Kommt denn bei dir keine ANR auch wenn du ewig (~5min) einstellst und wartest?

Welche Android Version nutzt du? Ich habe es auf Android 8.1 getestet

LG Pascal //It's not a bug, it's a feature. :) ;)

Hilfreich?
Diskutiere mit!
  • Forum-Beiträge: 855

03.02.2019, 12:32:43 via Website

ich habe das synchronized weggelassen und die AnR kommt recht schnell.
mit synchronized nach ca 2min auf android 6 im emulator das gleiche api 24.

na ja ich wolte ja auch nur eine Fuktion mit der ich die Coroutinen testen kann.

Ps. es gab aber auch noch ein kleines Update von Android Studio was ich noch nicht hatte. Vielleicht war es auch das. jetzt habe ich was ich wolte und kann meine versuche machen.
Danke.

— geändert am 03.02.2019, 12:36:17

Hilfreich?
Diskutiere mit!
  • Forum-Beiträge: 855

03.02.2019, 13:10:51 via Website

Verwunderlich ist das dieser code keinen Fehler auslöst
Emulator API 27

Kotlin

button.setOnClickListener() {
        Thread.sleep(1000*60*5)
        val intent = Intent(applicationContext, Activity2::class.java)
        startActivity(intent)
    }

Java

  Button bt = (Button) findViewById(R.id.button1);
    bt.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            try {
                Thread.sleep(1000*60*5);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            TextView text = findViewById(R.id.text1);
            text.setText(("neuer Text"));
        }
    });
}
Hilfreich?
Diskutiere mit!