German [Widget] Mal geht sie, mal geht sie nicht

KL7000F

Member
Licensed User
Longtime User
Hallo,

gleich mal vorweg, ich bin neu hier und erprobe mich mit der Trial :)
Aus dem Tutorial habe ich ein einfaches Widget erstellt, dass nichts weiter macht als eine Website auszulesen und anhand der verschiedenen Werte ein anderes Bild anzeigt. Ein Klick auf das Widget öffnet die ausgelesene Seite im Browser. Zwischengespeichert wird nichts.
Die App bzw. das Widget läuft im Debug-Modus meist ohne Probleme (per USB am Smartphone). Wenn ich aber ein Release erstelle und das per Hand installiere kommt es häufig vor dass das Widget nichts macht. Es reagiert auf nichts, außer das ich es vom Homescreen wieder entfernen kann. Starte ich die App über (Menü -> "App"), sprich die Activity, dann wird diese auch ganz normal ausgeführt (dort wird derzeit nur Text angezeigt).

Aktuell habe ich einfach zig mal compiliert und Smartphone neu gestartet bzw. dort Speicher geleert und Tasks gekillt. Manchmal hilfts, manchmal nicht.

Da der Quellcode an sich gut läuft und auch keine Fehler angezeigt werden, stehe ich jetzt ziemlich am Schlauch. Wo könnte, über den Teich gesagt, die Fehlerquelle liegen? Welche Infos helfen euch weiter, um das Problem zu lösen. Geg. liegts auch an mir :)

Gruß und Danke
KL7000F
 

corwin42

Expert
Licensed User
Longtime User
Ich vermute, die Bilder sind zu groß.

Um das Problem zu verstehen, muss man in etwa wissen, wie Widgets funktionieren. Das Widget selbst wird vom Launcher erstellt, dem man einfach ein Layout und die Inhalte übergibt. Das Problem ist, dass die eigentlichen Inhalte sozusagen an den Launcher gestreamt werden und dabei gibt es eine Größenbegrenzung, die man leider recht schnell bei Bildern erreicht.

Wenn jetzt eine große Bitmap an das Widget geschickt wird, dann kann es halt passieren, dass der Puffer für die Daten überläuft und dann wird das Bild nicht dargestellt und das komplette Update des Widgets schlägt fehl, was unter anderem auch dazu führt, dass keine Events mehr ausgeführt werden. Es gibt einen Workaround dafür. Dieser benötigt allerdings die Reflection library, ist also mit der Trial nicht nutzbar. Beim Workaround wird im Prinzip die Bitmap in eine Datei gespeichert und dem Launcher dann die URI mitgeteilt, wo er das Bild findet um es selbst zu laden.
 

KL7000F

Member
Licensed User
Longtime User
Hallo,
vielen Dank für deine Hilfe und den wertvollen Beitrag über die Sache. Die Bilder die an das Widget übergeben werden bzw. darin enthalten sind haben insgesamt eine Größe von 18,3 KB (pro Bild 3,05 KB / sprich 6 Bilder). Kann das bei der Größe schon sein?
Ich werde es einfach mal mit der Anzeige von verschiedenen Ziffern etc. über ein Label versuchen, dürfte ja dann keine Probleme machen.

Gruß
KL7000F
 

corwin42

Expert
Licensed User
Longtime User
Wichtig ist nicht die Filegröße der Bilder sondern die Auflösung, weil die Bilder unkomprimiert im Speicher gehalten werden. Ich hatte Probleme bei Icons mit ca. 200x200 Pixel Größe.
In den ungefilterten Logs müsste sogar eine (ziemlich nichtssagende) Fehlermeldung erscheinen ("!!! FAILED BINDER TRANSACTION !!!")
 

KL7000F

Member
Licensed User
Longtime User
Na gut, bei 32x32px hält sich die Auflösung auch in Grenzen. Lustigerweise trat bislang kein Fehler mehr auf. Ich werds mal beobachten und deine Tipps im Hinterkopf behalten.

Auf jeden Fall: Vielen Dank! :)
 
Top