Problem: zu lange Ladezeiten von .png Dateien

  • Antworten:7
  • Bentwortet
Ford Prefect
  • Forum-Beiträge: 29

06.05.2017, 22:15:42 via Website

Hallihallo,
ich bin noch ein ziemlicher Anfänger, was Android Programmierung angeht, aber ich hab mir gedacht ein kleines spiel programmieren wird schon gehen. Meine Idee war es, ein Bild als Button zu benutzten, und immer wenn das Bild geklickt wird einen Counter zu erhöhen. Mit einer if-Bedingung soll dann in 5er Schritten das Bild verändert werden.
Bei dem ganzen wird dann noch die zeit gemessen. Ziel ist es so schnell wie möglich an das Ende der Bilderreihe zu gelangen.
der Code sieht von der Struktur etwa so aus:

final ImageView gameImages = (ImageView)findViewById(R.id.gameImageView);
    gameImages.setImageResource(R.drawable.picture1);


    gameImages.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            counter++;
            if (counter >= 5) {
                gameImages.setImageResource(R.drawable.picture2);
            }
            if (counter >= 10){
                gameImages.setImageResource(R.drawable.picture3);
            }
            if (counter >= 15){
                gameImages.setImageResource(R.drawable.picture4);
            }
            if (counter >= 20){
                gameImages.setImageResource(R.drawable.picture5);
            }
            if (counter >= 25){
                gameImages.setImageResource(R.drawable.picture6);
            }
            if (counter >= 30){
                gameImages.setImageResource(R.drawable.picture7);
            }

...

Das Prinzip ist denke ich mal klar.
Das Problem ist jetzt nur, wenn ich die App teste , sowohl im Simulator, als auch auf meinem nexus 6, ist das Spiel extrem langsam, weil es beim Bilder (.png Dateien, 800x600p) Laden extrem lange braucht, manchmal stürzt die App sogar ab.
Wie kann ich dieses Problem nun lösen, oder hab ich von Grund auf einen falschen, oder nicht umsetzbaren Ansatz?
Ich würde mich sehr über Hilfe freuen.

Antworten
swa00
  • Forum-Beiträge: 3.704

06.05.2017, 23:07:41 via Website

Hallo Ford,

ich vermute stark , dass Dein Problem die Auflösung der Images ist.

Grafiken in diesen Grössen verwendet man selten in den Resourcen , sondern sollte sie ggf.
in den Assets mitliefern oder reduzieren. ( oder z.b. per Glide rendern )

Auch scaliert Android Grafiken automatisch auf die vom Display verwendete DPI.
Das benötigt dann entsprechenden Speicherplatz , der reserviert werden muss und kann recht
schnell zum Abstürz der App führen , wenn das Zieldevice an die 4 K besitzt (z.b. S6).

In Ausnahmefällen kann man diese Images in den /res/drawable-nodpi Ordner platzieren , dann werden
Diese nicht vom System angepasst - sondern 1:1 übernommen

— geändert am 06.05.2017, 23:49:38

Liebe Grüße - Stefan
[ App - Entwicklung ]

Ford Prefect

Antworten
Ford Prefect
  • Forum-Beiträge: 29

06.05.2017, 23:51:21 via Website

Vielen Dank für deine Antwort.

Grafiken in dieser Grössen verwendet man selten in den Resourcen , sondern sollte sie ggf.
in den Assets mitliefern oder reduzieren. ( oder z.b. per Glide rendern )

Könntest du mir erklären wie das genau funktioniert, oder hast du einen Link zu einem Tutorial?

Antworten
swa00
  • Forum-Beiträge: 3.704

06.05.2017, 23:58:31 via Website

Hallo ford

Könntest du mir erklären wie das genau funktioniert, oder hast du einen Link zu einem Tutorial?

Gerne :

Glide : https://github.com/bumptech/glide
Assets : http://www.concretepage.com/android/android-assetmanager-example-to-load-image-from-assets-folder

Viel Erfolg

— geändert am 07.05.2017, 01:03:03

Liebe Grüße - Stefan
[ App - Entwicklung ]

Ford Prefect

Antworten
Ford Prefect
  • Forum-Beiträge: 29

08.05.2017, 14:50:08 via Website

wie funktioniert das mit diesem nodpi Ordner? AndroidStudio hat keinen erstellt, und ich kann mit der Methode setImage nicht auf einen eigens erstellten zugreifen.
Mit freundlichen Grüßen,
Ford.

Antworten
swa00
  • Forum-Beiträge: 3.704

08.05.2017, 15:12:44 via Website

Und wie wäre es, wenn du diesen Ordner erstellst ???

Nochmal der Hinweis : das ist nur ein Workaround und wird nicht auf allen Devices funktionieren.
Wie oben erklärt, musst du es richtig tun.

— geändert am 09.05.2017, 09:53:32

Liebe Grüße - Stefan
[ App - Entwicklung ]

Antworten
Ford Prefect
  • Forum-Beiträge: 29

12.05.2017, 08:26:06 via Website

Ich habe das Problem gelöst...
War ein richtig dummer Fehler. Die if Bedingungen sind so geschrieben, dass desto höher der Counter wird, desto mehr Bilder lädt er direkt hintereinander. Habe das ganze jetzt umstrukturiert (if-else Verschachtellung) und es läuft reibungslos.
Mit freundlichen Grüßen,
Ford.

Antworten