2015-09-17

Ausgemauert

In Android gibt es viele skurrile Dinge. Mancher Leser dieses Blogs mag sich an meinen Talk Android Puzzlers erinnern. Nicht hinein geschafft hatte es die Stringkonstante BRICK. Über sie ist viel geschrieben und spekuliert worden, Echten Schaden angerichtet hat sie wohl nie. Und mit Android 6 ist sie nun Geschichte. R.I.P.
Auszug aus der Android-Entwicklerdoku

2015-09-15

Clip4Moni unter Linux

Heute wollte ich meine kleine Textschnipselverwaltung Clip4Moni in mein virtuelles Ubuntu 14.04 integrieren. Die .jar-Datei als automatisch startende Anwendung zu hinterlegen, sollte doch eigentlich ein Kinderspiel sein. Oder? Nicht ganz. Clip4Moni wollte nämlich einfach nicht starten... Pfade? Korrekt. Java? Vorhanden und im Suchpfad.
Nun ist die Krux bei Autostart-Programmen, dass das System einen die Fehlermeldungen nicht direkt um die Ohren haut, sondern man danach suchen muss. :-) Es hat sich herausgestellt, dass das Programm mit einem system tray not supported abbricht. Was insofern verwundern darf, als der Start aus der IDE heraus prima klappt. Ich vermute ein Timing-Problem. Vielleicht (Achtung: Spekulation) werden Autostart-Programme von Unity zu früh aufgerufen, so dass Java kein Systemtray findet. Ich konnte das Problem umgehen, indem ich in das Startscript von Clip4Moni ein sleep 5 eingebaut habe.
Eine kleine Unschönheit ist noch, dass der Hintergrund des Programmicons nicht wie gewünscht transparent ist, sondern grau. Hierfür gibt es einen Eintrag in der Fehlerdatenbank.

2015-09-13

Sonntägliches Kaffeesatzlesen

Heute schiebe ich mal einen zweiten Post nach... Bei einer schönen Tasse Kaffee philosophiert es sich so gut... :-)
Apple hat auf seinem September-Event ja nicht nur das iPad Pro vorgestellt, sondern auch gezeigt, was man mit großen Bildschirmen anstellen kann. Zum Beispiel zwei Apps nebeneinander darstellen. In der Desktop-Welt ist das natürlich ein alter Hut, man darf dabei aber nicht vergessen, dass die mobilen Betriebssysteme eben doch von den kleinen Bildschirmen her kommen. Weder auf dem ersten iPhone, noch auf dem Google G1 wäre so etwas sinnvoll gewesen. Hinzu kommt, dass die Rechenleistung der mobilen Geräte eben erst in den letzten Jahren auf Desktop-Niveau gebracht wurde. Selbst wenn man also dem ersten iPad eine für so etwas geeignete Bildschirmgröße zugestehen muss - seine Leistung wäre einfach nicht ausreichend gewesen. Microsoft hat auf seinen Surface-Geräten den (sogar recht flexiblen) side by side-Betrieb von Modern UI-Apps schon vor geraumer Zeit verfügbar gemacht. Nur konsequent ist deshalb, dass iOS hier nachzieht.
Und Android? Google hinkt nur scheinbar hinterher. Schon vor einigen Monaten hat ein verstecktes Feature in Android M-Previews für Aufsehen gesorgt. Ganz marktreif ist die Funktion wohl noch nicht, denn die letzte Vorschauversion für die Nexus-Reihe hat sie nicht an Bord. Da Android 6 Marshmallow aber in Verbindung mit neuen Smartphones debütieren wird, ist das Fehlen verzeihlich. Sinnvoll ist ein Zwei-Fenster-Modus bei 5,5 Zoll sicher nicht. Schon eher bei größerformatigen Tablets. Es würde mich daher nicht wundern, wenn es - wenn mal wieder ein neues Nexus-Tablet erscheint - ein Android 6.1 gibt, dass das Feature nachrüstet. So etwas ähnliches hat es früher ja schon beim Mehrbenutzermodus von Android gegeben. Der war zunächst nur auf Tablets verfügbar und hat etwas später auf Smartphones Einzug gehalten.
Was meinen Sie? Brauchen Sie den Zweifenster-Modus? Schreiben Sie mir...

Marshmallows mögen keine analogen Uhren

Ab API-Level 23 gilt die View AnalogClock als veraltet. Ich verneige mich vor der Komponente mit einer Abbildung aus meinem Android-Buch.
Abbildung aus meinem Buch Android 5
Die Frage ist nun - haben Zifferblätter und Zeiger keinen Platz im Material Design? Was denken Sie? schreiben Sie mir.

2015-09-07

Neu in Marshmallow: ArraySet

Es sind nicht immer die großen Neuerungen, die Entwicklern das Leben leichter machen. Auch die kleinen Dinge können helfen. Ob dies für die neue Klasse android.util.ArraySet zutrifft, sollte jeder für sich selbst entscheiden. Sie soll, so die Doku, effizienter mit dem Speicher umgehen als ein traditionelles HashSet. Ich zitiere:
“This implementation is separate from ArrayMap, however, so the Object array contains only one item for each entry in the set (instead of a pair for a mapping). [...] Because this container is intended to better balance memory use, unlike most other standard Java containers it will shrink its array as items are removed from it. Currently you have no control over this shrinking -- if you set a capacity and then remove an item, it may reduce the capacity to better match the current size. In the future an explicit call to set the capacity should turn off this aggressive shrinking behavior.”
Die spannende Frage ist: lohnt dies den vendor lock-in? Werden Sie die neue Klasse in Ihrem Code verwenden? Schreiben Sie mir...