Out of Memory

  • Antworten:21
  • Bentwortet
P-T
  • Forum-Beiträge: 745

18.12.2013, 21:48:58 via Website

Hi
Ich versuche ein Live Wallpaper mit einem gif zu machen...-das gif ist 350x 550 groß und hat 450 frames...-jede 6 sekunden soll sich das bild minimal ändern...
Das Problem: Es kommt immer davor out of memory...-ich habe schon daran gedacht die frames einzeln als dateien zu haben, nur kann ich schlecht mit einem programm immer einen einzelnen frame speichern und da ich keine Programme gefunden habe die das alles auf einmal machen muss ich irgendwie anders an mein ziel kommen...-ich bin bloß am ende meiner möglichkeiten
Hat von euch Superhirnen einer eine Idee?
Bitte helft mir!
Danke
edit: das bild wir automatisch angepasst und ich verwende die library gif decoder 1.0 und habe b4a

— geändert am 20.12.2013, 16:01:06

Posts vor dem 22.12.2014 sind von dem Vorgänger dieses Accounts

Antworten
impjor
  • Forum-Beiträge: 1.793

18.12.2013, 21:53:55 via App

Am besten lädst du nur 5 Bilder (ca). Währenddessen lädst du die nächsten. Danach kannst du die alten wieder aus dem Speicher werfen und die nächsten laden usw.

LG

Liebe Grüße impjor.

Für ein gutes Miteinander: Unsere Regeln
Apps für jeden Einsatzzweck
Stellt eure App vor!

Antworten
impjor
  • Forum-Beiträge: 1.793

18.12.2013, 21:56:43 via App

Zu deinem Aufteilungsproblem: Einfach mit Gimp o. ä. die einzelnen Frames extrahieren. Wenn z.B. in 10 Spalten angeordnet sind, 10x kopieren und je 9 Spalten entfernen. Dann die einzelnen Reihen.

Wo kommen die überhaupt her?

LG

Liebe Grüße impjor.

Für ein gutes Miteinander: Unsere Regeln
Apps für jeden Einsatzzweck
Stellt eure App vor!

Antworten
P-T
  • Forum-Beiträge: 745

20.12.2013, 14:03:19 via Website

impjor
Am besten lädst du nur 5 Bilder (ca). Währenddessen lädst du die nächsten. Danach kannst du die alten wieder aus dem Speicher werfen und die nächsten laden usw.

LG
Wie geht das?

Posts vor dem 22.12.2014 sind von dem Vorgänger dieses Accounts

Antworten
P-T
  • Forum-Beiträge: 745

20.12.2013, 14:03:49 via Website

impjor
Zu deinem Aufteilungsproblem: Einfach mit Gimp o. ä. die einzelnen Frames extrahieren. Wenn z.B. in 10 Spalten angeordnet sind, 10x kopieren und je 9 Spalten entfernen. Dann die einzelnen Reihen.

Wo kommen die überhaupt her?

LG
Sry ich versteh nicht was du meinst

Muss ich da jeden einzelnen rauspicken?:blink:
so viele frames???

— geändert am 20.12.2013, 16:04:38

Posts vor dem 22.12.2014 sind von dem Vorgänger dieses Accounts

Antworten
Fabian Simon
  • Forum-Beiträge: 359

20.12.2013, 14:17:12 via Website

Du nutzt einen eigenen Thread um die Inforamtionen zu laden.
Und fügst sie einer Liste hinzu.
Um sie zu entfernen entferne sie aus der Liste und jedlichen Zugriff.
Der Gabige Collector räumt dann auf.

Gruß
Fabian

Antworten
P-T
  • Forum-Beiträge: 745

20.12.2013, 16:01:45 via Website

Fabian Simon
Du nutzt einen eigenen Thread um die Inforamtionen zu laden.
Und fügst sie einer Liste hinzu.
Um sie zu entfernen entferne sie aus der Liste und jedlichen Zugriff.
Der Gabige Collector räumt dann auf.

Gruß
Fabian
meinst du anstatt threat service?

Posts vor dem 22.12.2014 sind von dem Vorgänger dieses Accounts

Antworten
Tim G.
  • Forum-Beiträge: 2

20.12.2013, 16:30:12 via Website

Wie Chris schon geschrieben hast muss du dir die Bilder, die das vollständige GIF ergeben einzeln aus der GIF Datei holen.

Ich denke das du beim Start des Wallpapers alle Bildinformation direkt in ein Array/ Liste läds. Das Problem ist dabei, dass du auf ein mal so viel Speicher dir reservierst. Wenn du nun das Bild wechselt wird noch mehr Speicher reserviert und Android killt deine App, damit Android noch flüssig laufen kann.

Was du jetzt machen musst, ist das du eine Methode dir schreibst die Asynchron (in einen anderen Thread als der Mainthread) aufgerufen wird. Diese Methode läd z.B. ein Teil des GIFs in ein Array/ Liste um so nicht direkt so viel Speicher zu reservieren zu müssen. Nach dem ein teil der Bilder aus dem Array angezeigt wurden, werden sie gelöscht und die nächsten Bilder werden gelade.

Antworten
Mac Systems
  • Forum-Beiträge: 1.727

20.12.2013, 16:47:20 via Website

Was du an sich machen mußt ist nur einmal den Speicher zu allokieren und dann entsprechend neue Frames in diesen zu laden, das hat den vorteil
das der GC nicht läuft und deutlich dazu bereitträgt das deine Framerate seiten wird.

Allerdings musst du das hier verstehen: http://developer.android.com/training/displaying-bitmaps/manage-memory.html

So wie Ich das sehe musst du http://developer.android.com/reference/android/graphics/BitmapFactory.Options.html#inBitmap nutzen.
In KitKat kannst du das ganze sogar noch etwas besser lösen, und die größen der Bitmaps wohl verändern beim wiederverwenden. Allerdings ist das halt
wirklich nur unter KitKat nutzbar und wohl eher was für die Zukunft.

Windmate HD, See you @ IO 14 , Worked on Wundercar, Glass V3, LG G Watch, Moto 360, Android TV

Antworten
Michele
  • Forum-Beiträge: 1.525

20.12.2013, 17:18:36 via Website

Hallo.

Einen LiveWallpaper zu machen ist recht einfach.

Habe selbst schon einen gemacht. Und wie? Mit was?

http://developer.android.com/reference/android/service/wallpaper/WallpaperService.html
http://developer.android.com/reference/android/service/wallpaper/WallpaperService.Engine.html
http://developer.android.com/reference/android/graphics/Canvas.html
http://developer.android.com/reference/android/view/SurfaceView.html

und vieles mehr.

Wie @Tim G. schon sagte, setze alle Bitmaps/Bilder in eine ArrayList.

In Java/Android z.B so:
1private ArrayList<Bitmap> bitmapList = new ArrayList<Bitmap>();


LG

— geändert am 20.12.2013, 17:19:32

Antworten
Mac Systems
  • Forum-Beiträge: 1.727

20.12.2013, 17:23:27 via Website

Und dann platz der Speicher oder was ? Ein Livewallpaper das dem Device mal allen RAM klaut kanns ja wohl nicht sein.

Windmate HD, See you @ IO 14 , Worked on Wundercar, Glass V3, LG G Watch, Moto 360, Android TV

Antworten
Michele
  • Forum-Beiträge: 1.525

20.12.2013, 17:25:22 via Website

Warum sollte das passieren Mac?

Mein LiveWallpaper läuft 1 Woche ohne Akku,Ram etc saugen :D


LG

— geändert am 20.12.2013, 17:31:02

Antworten
Mac Systems
  • Forum-Beiträge: 1.727

20.12.2013, 18:00:48 via Website

Wenn du wenig Images hast, was aber wie angedeutet 60 x Bilder gehalten werden müssen ?

Windmate HD, See you @ IO 14 , Worked on Wundercar, Glass V3, LG G Watch, Moto 360, Android TV

Antworten
P-T
  • Forum-Beiträge: 745

20.12.2013, 18:26:04 via Website

Hi alle miteinander
Danke für die vielen Antworten nur habe ich b4a und kein Java...
Wenigstens weis ich jetzt woran das liegt und wieso dann die App angehalten wird...-Die einfachste Lösung wäre ja immer nur ein Bild zu laden... und da das mit meiner gif library nicht klappt(bzw. ich nicht weis wie) wäre es doch einfacher die gifs als einzelne Bilder abzuspeichern...-Nur kenne ich bis jetzt nur Programm mit denen man einen Frame nach dem anderen machen muss...-Das ist bei dieser Anzahl Frames ein wenig doof

Posts vor dem 22.12.2014 sind von dem Vorgänger dieses Accounts

Antworten
Michele
  • Forum-Beiträge: 1.525

20.12.2013, 18:29:05 via Website

Mac Systems
Wenn du wenig Images hast, was aber wie angedeutet 60 x Bilder gehalten werden müssen ?

Ja bei 60 ist das schon wieder was anderes. Wusste ja nun nicht genau was du meintest.

Aber es ist natürlich alles möglich.


LG

Antworten
Carsten M.
  • Forum-Beiträge: 33.204

20.12.2013, 18:31:30 via App

Chris H.
Hi alle miteinander
Danke für die vielen Antworten nur habe ich b4a und kein Java...
Wenigstens weis ich jetzt woran das liegt und wieso dann die App angehalten wird...-Die einfachste Lösung wäre ja immer nur ein Bild zu laden... und da das mit meiner gif library nicht klappt(bzw. ich nicht weis wie) wäre es doch einfacher die gifs als einzelne Bilder abzuspeichern...-Nur kenne ich bis jetzt nur Programm mit denen man einen Frame nach dem anderen machen muss...-Das ist bei dieser Anzahl Frames ein wenig doof
Wende Dich an den Entwickler der Library oder lies Dich in ihren Gebrauch ein.

Sieh mal nach Loadbitmap und verwende stattdessen LoadbitmapSample. Hatten wir aber alles schon mal diskutiert...

Herzliche Grüße

Carsten

Ich komm' mir langsam vor wie jemand, der ich bin // #cäthe

Antworten
P-T
  • Forum-Beiträge: 745

20.12.2013, 18:42:44 via Website

Carsten Müller
Chris H.
Hi alle miteinander
Danke für die vielen Antworten nur habe ich b4a und kein Java...
Wenigstens weis ich jetzt woran das liegt und wieso dann die App angehalten wird...-Die einfachste Lösung wäre ja immer nur ein Bild zu laden... und da das mit meiner gif library nicht klappt(bzw. ich nicht weis wie) wäre es doch einfacher die gifs als einzelne Bilder abzuspeichern...-Nur kenne ich bis jetzt nur Programm mit denen man einen Frame nach dem anderen machen muss...-Das ist bei dieser Anzahl Frames ein wenig doof
Wende Dich an den Entwickler der Library oder lies Dich in ihren Gebrauch ein.

Sieh mal nach Loadbitmap und verwende stattdessen LoadbitmapSample. Hatten wir aber alles schon mal diskutiert...

Herzliche Grüße

Carsten
hatten wir ja.. nur funktioniert das nicht mit der gif library:(

Posts vor dem 22.12.2014 sind von dem Vorgänger dieses Accounts

Antworten
Carsten M.
  • Forum-Beiträge: 33.204

20.12.2013, 18:47:41 via App

Chris H.

hatten wir ja.. nur funktioniert das nicht mit der gif library:(
Dann hast Du es entweder falsch gemacht oder die Library funktioniert dafür nicht. Deshalb den Entwickler fragen oder selbst bauen.

Herzliche Grüße

Carsten

Ich komm' mir langsam vor wie jemand, der ich bin // #cäthe

Antworten
P-T
  • Forum-Beiträge: 745

20.12.2013, 19:01:26 via Website

Carsten Müller
Chris H.

hatten wir ja.. nur funktioniert das nicht mit der gif library:(
Dann hast Du es entweder falsch gemacht oder die Library funktioniert dafür nicht. Deshalb den Entwickler fragen oder selbst bauen.

Herzliche Grüße

Carsten
mist...
und kennt jemand ein programm um alle auf einmal zu exportieren?

— geändert am 20.12.2013, 19:18:39

Posts vor dem 22.12.2014 sind von dem Vorgänger dieses Accounts

Antworten
Carsten M.
  • Forum-Beiträge: 33.204

20.12.2013, 19:18:23 via App

Delay ist eine Verzögerung im Ablauf.

Herzliche Grüße

Carsten

— geändert am 20.12.2013, 19:35:24

Ich komm' mir langsam vor wie jemand, der ich bin // #cäthe

Antworten
San Blarnoi
  • Forum-Beiträge: 2.545

20.12.2013, 22:47:19 via Website

Nur kenne ich bis jetzt nur Programm mit denen man einen Frame nach dem anderen machen muss

IrfanView kann alle Frames auf einmal speichern.

Antworten
P-T
  • Forum-Beiträge: 745

21.12.2013, 12:20:11 via Website

and dev
Nur kenne ich bis jetzt nur Programm mit denen man einen Frame nach dem anderen machen muss

IrfanView kann alle Frames auf einmal speichern.
DANKE DANKE DANKE :#
Das ist genau das was ich gesucht hab!
Vielen Dank
Und entschuldige den Rechtschreibfehler... Fiel mir grad erst auf

Posts vor dem 22.12.2014 sind von dem Vorgänger dieses Accounts

Antworten