Archive for the 'Android' Category

Android & Multithreaded HTTP-Requests

Tuesday, April 6th, 2010

During the last 3 days on my new job at Sense Networks in New York I was supposed to fix some issues in a project concerning multi threaded http requests in an Android application. At first I thought it’d be a pretty easy task even though I never really used HttpConnectionManager before. So I started reading a bit about it and created some classes, interfaces and stuff like that to have a nice and generic architecture for the project. In fact I am using the MultiThreadedHttpConnectionManager (httpclient-3.x) but Android calls it ThreadSafeClientConnManager as it’s called in the httpclient-4.x which is currently in an alpha stadium.
After the first steps of implementing and testing the test application was throwing exceptions and I just couldn’t figure out why. It seemed to be totally random, the exception as well as the time it shows up. So I started reading tons of different tutorials for Android as well as for the Java2SE httpclient. No one seemed to experience the same problem and I admit it felt a bit like doing some basic newbie stuff wrong without knowing about it. After hours of research and testing the “bug” was finally found and it still seems to be pretty stupid but when you think about it, I’d say it isn’t that stupid. From my point of view it’s something that should be handled by the virtual machine, so for Android by Dalvik:
The response of a http request contains and entity which provides access to the content in form of an inputstream and this content has to be consumed otherwise it’ll never be removed from the memory even if you close/abort the request. Funny thing about this: I read ~50 pages, tutorials and threads but just one mentioned that in a comment line…
As all my tests were just sending a request to the given uri and then checking out the StatusLine for a possible error code the the response was closed if no error code was sent and “everything was fine”. At least that’s what I thought. In fact the sockets were still open, waiting for the empty content of the response to be consumed. So after some requests the memory was full and trying to open a new connection or sending a new request ended up in different exceptions (e.g. Timeout, Unknown Host, Connection refused). After figuring this out, the fix was quite easy. Now, before closing the response, the program consumes the content – even if it is empty – and then the vm cleans it up as expected. No more exceptions and everything works fine :)

By the way, you might want to check out CabSense ;)

Erste Arbeitswoche in NYC

Saturday, April 3rd, 2010
Ausblick vom Office
Ausblick vom Office

Es ist schon ein paar Tage her, dass ich hier etwas gepostet habe, obwohl ich eigentlich wieder mehr posten wollte. Allerdings gibt es hier wirklich reichlich Ablenkung :)

Meine erste Arbeitswoche ist rum und mit Erstaunen musste ich feststellen, dass Karfreitag und Ostermontag hier keine Feiertage sind, ich also ganz normal arbeiten musste. Schlimm ist das aber nicht wirklich, denn bisher macht es richtig Spaß! Alle Kollegen sind nett und das erleichtert den Einstieg natürlich enorm, wobei mir das Arbeiten an einem Mac teilweise doch recht schwer fällt ^^ Mit meinem ersten kleinen Projekt war ich nach 3 Tagen fertig, habe somit die Feuertaufe gut überstanden und einiges an Lob für das Ergebnis bekommen. Ein rundum gelungener Einstieg also und ich hoffe, dass es so weitergeht :mrgreen:
Seit Donnerstag bin ich jetzt in einem (bzw 3) Android-Projekt(en) und habe schon einiges lernen können, auch wenn ich großteils noch damit beschäftigt bin die komplette Architektur zu verstehen. Ich hoffe natürlich auch hier einige Beiträge zu einem sehr guten Ergebnis liefern zu können ;)

Am Donnerstag war großer Releasetag, weshalb im Büro einiges los war. Einer der Chefs hat auf einer Konferenz (Where 2.0) das neuste Projekt CabSense vorgestellt und gleichzeitig landete es in den Marketstores von Android und Apple (iPhone & iPad). Die Nutzerzahlen bisher sind unglaublich und heute ist auch noch ein Artikel in der Druckausgabe der New York Times über das Projekt (online Version). Jetzt sind wir natürlich alle gespannt wie die Zahlen am Montag aussehen werden ;)

Das Bild oben rechts ist übrigens ein Teil dessen, was ich sehe, wenn ich im Büro aus dem Fenster schaue. Genauer gesagt ist das die Skyline vom Financial District, also NYC Downtown ;) Bei passender Gelegenheit nehme ich mal meine richtige Kamera mit und mache ein paar Bilder vom Sonnenuntergang und wie im Dunkeln aussieht. Vorweg kann ich aber schon mal sagen: es ist sehr beeindruckend :)

Übrigens habe ich mir jetzt auch einen Twitter-Account zugelegt, falls mir also jemand folgen möchte: http://twitter.com/moritzp82 ;)

Bald geht es los :) & Reminder

Friday, March 19th, 2010

Wie ihr euch sicherlich vorstellen könnt, habe ich zur Zeit viel zu organisieren (Formalitäten 95% done, Umzug ist fertig) und einen Haufen anderer Sachen zu tun, denn schließlich geht es am Dienstag endlich Richtung New York :mrgreen: Dementsprechend wenig komme ich grade dazu mich hier um das Blog zu kümmern. Eigentlich wollte ich in der Zwischenzeit Einträge über Sherlock Holmes ( :thumbup: ), Männer die auf Ziegen starren und Kick-Ass ( :thumbup: ) geschrieben haben. Außerdem gibt es ein paar Neuigkeiten über appazaar und noch ein wenig anderen Kram den ich loswerden wollte, wie zum Beispiel das BGH Urteil zur Vorratsdatenspeicherung wollte. Mal schauen wann in den nächsten Tagen ich dazu komme. Vielleicht Dienstag am Flughafen, während ich auf meinen British Airways Flieger warte, wobei ich immer noch inständig hoffe, dass am Dienstag alles halbwegs gut läuft und ich nicht außerplanmäßig irgendwo übernachten muss :D
Ich missbrauche also diesen Post mal als Reminder für mich selbst und verspreche die Posts nachzuholen! Aus New York gibt es dann sowieso reichlich und ich werde wohl auch öfter meine Kamera mitnehmen und ein paar Bilder schießen ;)

Ubiquitous Computing / PSDetris Präsentation bei der PSD-Bank

Thursday, February 11th, 2010

Gestern Abend war es endlich soweit. Nachdem wir letzte Woche das Projekt schon in kleinem Kreis vorgestellt haben, war gestern der offizielle Termin bei der PSD-Bank und somit der erste offizielle Lauf auf der Medien Fassade – abgesehen von ein paar vorherigen Tests ;)

PSDetris PSDetris PSDetris PSDetris
PSDetris PSDetris PSDetris PSDetris

Neben unserem Projekt PSDetris haben auch noch 4 andere Gruppen ihre Arbeiten vorgestellt. Eine Gruppe hat sich mit Lichtverschmutzung beschäftigt – übrigens das einzige iPhone Projekt, während alle anderen mit Android gearbeitet haben -, eine weitere mit dem Game of Life, eine dritte mit der Bereitstellung diverser aktueller Informationen über Münster (z.b. Parkhausauslastung, Wetter) und die Vierte mit einem Spiel, in dem man ein Labyrint durchlaufen und Hindernisse überwinden muss. Alles ziemlich coole Projekte!
Die Leute der PSD-Bank schienen auch beeindruckt von unseren Ideen, was man mit ihrem “großen Bildschirm” alles so anstellen kann und in den nächsten Wochen wird es eine Pressemitteilung geben und eventuell einen weiteren Termin, an dem dann die Projekte erneut präsentiert werden. Mal abwarten, wahrscheinlich bin ich dann eh nicht mehr da ;)
Auf jeden Fall wurden natürlich reichlich Bilder geschossen und einige davon könnt ihr euch in der Galerie anschauen ;)

appazaar im Market Store

Monday, February 1st, 2010

appazaarMitte letzter Woche war es soweit und wir haben appazaar in den Market Store von Android released. Wer es also jetzt haben möchte, braucht nur dort zu suchen und auch die Updates werden in Zukunft natürlich darüber released werden. Wir sind schon wieder fleißig dabei zu verbessern und zu korrigieren und die Liste für den nächsten größeren Release ist bereits angefangen! Falls ihr Ideen, Wünsche oder Vorschläge habt, könnt ihr das entweder hier oder besser noch auf dem Blog von appazaar posten. Wir sind für jedes Feedback dankbar :)

Hier ein kleiner Auszug von dem Release-Post:

appazaar WidgetContext tag editor

Since the first beta we improved appazaar a lot but the most significant changes for you will be these:

* context tags: You now have the possibility to describe your current situation with a few words like “home, lunch” or “working” to improve the quality of the recommendations.
* less traffic: We reduced the traffic a lot with zipping everything and scaling the icons down. So there is less data to commit!
* recommending: On the server side we’re now using different algorithms that still need to be trained more, but that already should recommend more interesting apps for you.

PSDetris

Wednesday, January 27th, 2010

So, jetzt wird das Geheimnis um diesen Post gelüftet :mrgreen:

Im Wahlfach “Ubiquitous Computing” haben wir für die PSD Bank in Münster eine neue Art von Tetris entwickelt, die sich vor allem durch ihre neuartige Steuerungsmöglichkeiten und den erweiterten Multiplayer-Mode auszeichnet.
Kurz zusammengefasst: Steuern tut man den Spaß durch Bewegungen (nach rechts/links laufen bzw. um die eigene Achse drehen) und im Multiplayer können beliebig viele Leute Einfluss auf den aktuellen fallenden Stein nehmen. Dabei wird demokratisch bestimmt, was der Stein als nächstes tut. Interessant und lustig sieht es schon bei 3 Spielern aus, wie man unten in dem Video sehen kann :)

Warum grade für die PSD Bank? Nun ja, die Jungs haben eine 220m² große Medienfassade an der Außenwand und die eignet sich super um darauf zu spielen! Mitte Februar wird das ganze Premiere feiern und wir hoffen auf zahlreiche Zuschauer und vor allem gutes Wetter ;)

Timer(Task) = bad! Do it the Android way: Use a Handler :)

Sunday, January 24th, 2010

Well, after programming a while for Android I got in touch with some things that are different from usual Java. I already mentioned that before, when I decided to start writing about my experiences with Android: Android & Memory (Leaks) ;)

This time I’d like to write a bit about Timer and TimerTask and why you shouldn’t use them…

Continue reading “Timer(Task) = bad! Do it the Android way: Use a Handler :)” »

Android & Memory (Leaks)

Saturday, January 9th, 2010

While programming for Android I already figured out a lot of things that are really different compared to other platforms. It’s not only the api that’s new, it’s also a way of programming. Some things are connected in a way I’ve never seen before or it wasn’t important for me at all. Sometimes this brings up strange reactions of the system or problems. Often it’s hard to find solutions for these things and that’s why I decided to keep on posting my experiences here. Maybe they’ll be helpful for some other people out there ;)

Last week I was working on appazaar and implemented a new feature for the upcoming release. While testing everything seemed fine so I installed the app on my device and used it the way I’d expect other users to do. Well, basically I used my phone the normal way and appazaar from time to time :mrgreen:
Anyway, after a while the widget always stopped updating itself so I started debugging and found a message saying “Java Binder Transaction Failed“. So I started looking for it on Google and found lots of people having the same message in different situations. Sadly most of them didn’t talk about a solution but at some point I found a post on the Android Developers Blog. Basically the problem is about recursive references that come up easily if you try to create “fast” code. The article is describing the problem pretty good so I won’t go into that any deeper but here’s some of what killed my app:
Considering the fact that there’s a background service updating the widget under special circumstances, I used some static variables for stuff the service was using at least during every update. Actually that’s fast code but as mentioned in the article:

This code is very fast and also very wrong.

So I changed some class-variables to local ones inside of functions et voilà: Problems solved ;)

Here’s another post explaining a bit about it: AppWidgets: Reusing RemoteViews instance leaks memory?

appazaar beta release

Tuesday, December 22nd, 2009

appazaarAfter some hard work and uncounted hours of testing and improving it’s done: The first beta of appazaar is available :)

appazaar is able to figure out what applications might be interesting for you in your current context and recommends them to you. All you have to do is install it and place the widget on your desktop :mrgreen:

What is appazaar doing?
The short answer: appazaar is the last.fm for mobile apps ;)

Once the appazaar-widget is started it will recommend you apps from the Market Store. If you want to know how we know what to recommend, take a short look at the FAQ and the About appazaar page!

As this is just a beta version we’re happy about everyone who’s interested and giving us feedback about it!

Android Market on Emulator

Wednesday, December 2nd, 2009

I am working on an application for Android which needs the Market and it’s kind of annoying to always use the real device here in front of me I was looking for a way to use the Market on the emulator. Officially that’s not supported and there is nothing line a .apk file for the Market application. After a little googling I found a straight forward solution:

What do you need?

Well, the basic SDK. 1.5, 1.6 or 1.1

And then, go to the HTC website where you can find the images/recovery images. Download the version (system image only) which you want to run.

http://developer.htc.com/google-io-device.html#s3

(Download the System Image zip)

Extract the files of this zip. There’s a system.img file which you will need in the next steps.

Create an AVD (1.1, 1.5 or 1.6) depending on your requirements.

Copy this system.img file into the avd directory. For example, if you created an avd named “MyPhone”, go to .android/avd/MyPhone/ and paste this system.img file here.

As you can read in the comments, there are some issues with the network connection and things like that so if it doesn’t work for you, you should try the image Beanie uploaded here.

My way to finally get it to work:

  • Download the image provided by Beanie
  • Create a new 1.6 device in eclipse and give it the good system partition size (>78MB)
  • extract Beanies rar file and copy the system.img to ~.android/avd/YOUR_PHONE