Code optimierung

  • 7 Antworten
  • Letztes Antwortdatum
N

naruto25

Neues Mitglied
0
Hallo Leute,

könnte man den folgenden code optimieren? also auf das laufzeit verhältnis gesehen. ich habe eine imageview programmiert welches die images im drawable ordner mit jedem button klick abwechselnt anzeigt.

hier der code:

Code:
ImageView image;
final int[] images = {R.drawable.comp_1, R.drawable.comp_2,...}
.....
.....

refreshbutton.setOnClickListener(new View.OnClickListener() {
         
            @Override
            public void onClick(View arg0) {
                Random rng = new Random();
                
                List<Integer> generated = new ArrayList<Integer>();
                for (int i = 0; i < images.length; i++)
                {
                  while(true)
                  {
                     Integer next = rng.nextInt(images.length) ;
                     if (!generated.contains(next))
                     {
                        generated.add(next);
                        image.setImageResource(images[next]);
                        break;
                     }
                   }
                }
            }
        });

es tut auch was es soll, aber beim emulator dauert das ca 15 sek. bis das bild gewechselt wird. auf meinem galaxy s2 dauert es ca 3 sekunden.
hier ist nochmal die logcat aufzeichnungen beim drücken auf den button

Code:
11-29 12:56:26.314: D/dalvikvm(2471): GC_FOR_ALLOC freed 11729K, 27% free 3222K/4384K, paused 105ms, total 108ms
11-29 12:56:26.444: I/dalvikvm-heap(2471): Grow heap (frag case) to 10.604MB for 7680016-byte allocation
11-29 12:56:26.664: D/dalvikvm(2471): GC_CONCURRENT freed <1K, 10% free 10722K/11888K, paused 77ms+23ms, total 222ms
11-29 12:56:27.464: D/dalvikvm(2471): GC_FOR_ALLOC freed <1K, 10% free 10722K/11888K, paused 59ms, total 59ms
11-29 12:56:27.534: I/dalvikvm-heap(2471): Grow heap (frag case) to 14.723MB for 4320016-byte allocation
11-29 12:56:27.814: D/dalvikvm(2471): GC_CONCURRENT freed 0K, 8% free 14941K/16108K, paused 79ms+31ms, total 275ms
11-29 12:56:28.134: D/dalvikvm(2471): GC_FOR_ALLOC freed 11719K, 27% free 3222K/4384K, paused 106ms, total 108ms
11-29 12:56:28.264: I/dalvikvm-heap(2471): Grow heap (frag case) to 10.604MB for 7680016-byte allocation
11-29 12:56:28.504: D/dalvikvm(2471): GC_CONCURRENT freed <1K, 10% free 10722K/11888K, paused 77ms+32ms, total 235ms
11-29 12:56:29.274: D/dalvikvm(2471): GC_FOR_ALLOC freed <1K, 10% free 10722K/11888K, paused 59ms, total 59ms
11-29 12:56:29.354: I/dalvikvm-heap(2471): Grow heap (frag case) to 14.723MB for 4320016-byte allocation
11-29 12:56:29.594: D/dalvikvm(2471): GC_CONCURRENT freed 0K, 8% free 14941K/16108K, paused 77ms+24ms, total 245ms
11-29 12:56:29.944: D/dalvikvm(2471): GC_FOR_ALLOC freed 11719K, 27% free 3222K/4384K, paused 102ms, total 105ms
11-29 12:56:30.074: I/dalvikvm-heap(2471): Grow heap (frag case) to 10.604MB for 7680016-byte allocation
11-29 12:56:30.315: D/dalvikvm(2471): GC_CONCURRENT freed <1K, 10% free 10722K/11888K, paused 77ms+23ms, total 243ms
11-29 12:56:31.104: D/dalvikvm(2471): GC_FOR_ALLOC freed <1K, 10% free 10722K/11888K, paused 58ms, total 58ms
11-29 12:56:31.184: I/dalvikvm-heap(2471): Grow heap (frag case) to 14.723MB for 4320016-byte allocation
11-29 12:56:31.444: D/dalvikvm(2471): GC_CONCURRENT freed 0K, 8% free 14941K/16108K, paused 78ms+36ms, total 257ms
11-29 12:56:31.894: D/dalvikvm(2471): GC_FOR_ALLOC freed 11719K, 27% free 3222K/4384K, paused 104ms, total 238ms
11-29 12:56:32.025: I/dalvikvm-heap(2471): Grow heap (frag case) to 10.604MB for 7680016-byte allocation
11-29 12:56:32.244: D/dalvikvm(2471): GC_CONCURRENT freed <1K, 10% free 10722K/11888K, paused 77ms+21ms, total 214ms
11-29 12:56:33.044: D/dalvikvm(2471): GC_FOR_ALLOC freed <1K, 10% free 10722K/11888K, paused 60ms, total 60ms
11-29 12:56:33.124: I/dalvikvm-heap(2471): Grow heap (frag case) to 14.723MB for 4320016-byte allocation
11-29 12:56:33.384: D/dalvikvm(2471): GC_CONCURRENT freed 0K, 8% free 14941K/16108K, paused 76ms+22ms, total 258ms
11-29 12:56:33.704: D/dalvikvm(2471): GC_FOR_ALLOC freed 11719K, 27% free 3222K/4384K, paused 102ms, total 106ms
11-29 12:56:33.834: I/dalvikvm-heap(2471): Grow heap (frag case) to 10.604MB for 7680016-byte allocation
11-29 12:56:34.074: D/dalvikvm(2471): GC_CONCURRENT freed <1K, 10% free 10722K/11888K, paused 88ms+22ms, total 234ms
11-29 12:56:34.874: D/dalvikvm(2471): GC_FOR_ALLOC freed <1K, 10% free 10722K/11888K, paused 59ms, total 59ms
11-29 12:56:34.976: I/dalvikvm-heap(2471): Grow heap (frag case) to 14.723MB for 4320016-byte allocation
11-29 12:56:35.235: D/dalvikvm(2471): GC_CONCURRENT freed 0K, 8% free 14941K/16108K, paused 78ms+23ms, total 252ms
11-29 12:56:35.814: D/dalvikvm(2471): GC_FOR_ALLOC freed 12672K, 27% free 3223K/4384K, paused 106ms, total 112ms
11-29 12:56:35.954: I/dalvikvm-heap(2471): Grow heap (frag case) to 10.604MB for 7680016-byte allocation
11-29 12:56:36.204: D/dalvikvm(2471): GC_CONCURRENT freed <1K, 10% free 10722K/11888K, paused 77ms+32ms, total 247ms
11-29 12:56:36.974: D/dalvikvm(2471): GC_FOR_ALLOC freed <1K, 10% free 10722K/11888K, paused 67ms, total 67ms
11-29 12:56:37.044: I/dalvikvm-heap(2471): Grow heap (frag case) to 14.723MB for 4320016-byte allocation
11-29 12:56:37.304: D/dalvikvm(2471): GC_CONCURRENT freed 0K, 8% free 14941K/16108K, paused 76ms+37ms, total 254ms
11-29 12:56:37.633: D/dalvikvm(2471): GC_FOR_ALLOC freed 11719K, 27% free 3222K/4384K, paused 104ms, total 110ms
11-29 12:56:37.773: I/dalvikvm-heap(2471): Grow heap (frag case) to 10.604MB for 7680016-byte allocation
11-29 12:56:38.013: D/dalvikvm(2471): GC_CONCURRENT freed <1K, 10% free 10722K/11888K, paused 77ms+42ms, total 233ms
11-29 12:56:38.784: D/dalvikvm(2471): GC_FOR_ALLOC freed <1K, 10% free 10722K/11888K, paused 59ms, total 59ms
11-29 12:56:38.853: I/dalvikvm-heap(2471): Grow heap (frag case) to 14.723MB for 4320016-byte allocation
11-29 12:56:39.124: D/dalvikvm(2471): GC_CONCURRENT freed 0K, 8% free 14941K/16108K, paused 78ms+23ms, total 270ms
11-29 12:56:39.443: D/dalvikvm(2471): GC_FOR_ALLOC freed 11719K, 27% free 3222K/4384K, paused 102ms, total 103ms
11-29 12:56:39.573: I/dalvikvm-heap(2471): Grow heap (frag case) to 10.604MB for 7680016-byte allocation
11-29 12:56:39.813: D/dalvikvm(2471): GC_CONCURRENT freed <1K, 10% free 10722K/11888K, paused 76ms+22ms, total 229ms
11-29 12:56:40.603: D/dalvikvm(2471): GC_FOR_ALLOC freed <1K, 10% free 10722K/11888K, paused 63ms, total 64ms
11-29 12:56:40.683: I/dalvikvm-heap(2471): Grow heap (frag case) to 14.723MB for 4320016-byte allocation
11-29 12:56:40.946: D/dalvikvm(2471): GC_CONCURRENT freed 0K, 8% free 14941K/16108K, paused 78ms+24ms, total 265ms
11-29 12:56:41.274: D/dalvikvm(2471): GC_FOR_ALLOC freed 11719K, 27% free 3222K/4384K, paused 104ms, total 107ms
11-29 12:56:41.293: I/dalvikvm-heap(2471): Grow heap (frag case) to 4.498MB for 1276816-byte allocation
11-29 12:56:41.524: D/dalvikvm(2471): GC_CONCURRENT freed <1K, 21% free 4469K/5632K, paused 77ms+19ms, total 222ms
11-29 12:56:41.714: D/dalvikvm(2471): GC_FOR_ALLOC freed <1K, 21% free 4469K/5632K, paused 63ms, total 63ms
11-29 12:56:41.734: I/dalvikvm-heap(2471): Grow heap (frag case) to 5.182MB for 718216-byte allocation
11-29 12:56:41.935: D/dalvikvm(2471): GC_CONCURRENT freed 0K, 19% free 5170K/6336K, paused 77ms+18ms, total 203ms
11-29 12:56:41.935: D/dalvikvm(2471): WAIT_FOR_CONCURRENT_GC blocked 12ms
11-29 12:56:41.944: I/Choreographer(2471): Skipped 13425 frames!  The application may be doing too much work on its main thread.

kann man da was rausholen? eventuell habe ich mir gedacht, dass man das feld images nacheinander und nicht random ausgibt.

danke im voraus
 
Wie groß sind denn diese Bilder?
 
1600x1200 aber ca. 150 kb pro bild
 
kannst du bitte etwas kommentieren, was dein code eigentlich tun soll. ich checks nicht ganz - bzw deine verbale beschreibung passt irgendwie nicht zum code

du sagst, du möchtest bei jedem button click genau EIN bild ändern, da du ja nur eine imageview hast

warum dann eine for Schleife über die Anzahl der bilder? - würde ja genau 1 mal reichen => also schleife ist dann überflüssig.

ist nur ne annhame, da ich nicht ganz check, was genau du machen willst. könnte das zutreffen ?
 
hallo swordi, am anfang wollte ich mit dem imageview eine art animation machen. also im folder drawable befinden sich z.b. 10 bilder. imageview sollte dann z.b. alle 3 sekunden die bilder ändern, wobei die bilder zufällig ausgewählt werden sollten. der timer war nicht mit eingebaut. ich wollte lediglich erstmal nur die bilder zufällig wieder geben.

aber hat sich erledigt. ich habe einen if-statement benutzt welches die bilder nacheinander per klick anzeigt.
 
Unbedingt, unbedingt die while(true)-Schleife weg! Da erstellst du jedes Mal ein Integer-Objekt - ganz böse! :) Und das auch noch über eine äußere for-Schleife. Kann nicht gut gehen!

Davon abgesehen verstehe ich deinen Code auch nicht ganz.
Wenn du - laut deiner Beschreibung - bei einem Klick immer das Bild wechseln willst, wieso greifst du auf einen Random-Parameter zurück?
Definiere dir doch einfach eine globale Variable in deinem Listener, zähl pro Klick rauf, vergleiche die Variable mit der Länge deines string-arrays (notfalls auf 0 zurück) und greif dir das Element aus deinem string-array über die Variable.

/e: ok, zu spät ...
 
@funglejunk siehe mein post vor deins. :)
hatte eigentlich was anderes vor. aber jetzt habe ich alle schleifen weggemacht. und wie du gesagt hast eine variable gesetzt welches bei jedem klicken hochgezählt wird und dementsprechend das i-te element aus dem feld rausholt. jetzt läuft es deutlich schneller.

@mike_sd: danke ;)
 
Zurück
Oben Unten