Archive | July 2011

App Quarantine – Report #1


Introduction

I decided to start a blog and write about my new Android app called App Quarantine. This inital post is split up into a few chapters:

  1. Motivation
  2. Basic features
  3. Up the Honeycombs!
  4. Advanced features
  5. Android market statistics
  6. Technical information
  7. Goodbye! I hope to meet you again!


Motivation

The general purpose is to get rid of unwanted (system) apps on your device. There are basically two methods: delete them, or freeze them. There are advantages and disadvantages for each solution, but there’s also a similarity: in any way you need to have root access on your device. App Quarantine at the moment is only freezing the apps. This means the system partition is not touched, and you’ll get no troubles with OTA updates. When apps are in quarantine then the user can no longer launch the app, and all of its background services are disabled.


Basic features

When launching the app then you’ll see a list of all your system apps. What you can do now is select all apps which you don’t need, hit the menu button on your phone, and select Lock. The apps will then be put into quarantine and disappear from the list. Alternatively you can also change the filter and there you can choose which kind of apps you want to see in the list: system apps, regular apps, or both.

In the Quarantine section of the app you can see all apps which you have disabled before. If you want to get them back, just select them in the list, hit the menu button, and select Restore.

Note: After locking or restoring apps the home screen is refreshed by App Quarantine. This is necessary to guarantee an up-to-date list in the app drawer. Otherwise there would be app icons which you could not launch, or vice versa there’d be apps available on your device which are nowhere visible. So when your home screen is reloading after you have quarantined an app, then this is normal behaviour!


Up the Honeycombs!

When App Quarantine is launched on an Android 3.0 tablet then it will look little different compared to phones because there’s also an UI which is especially designed for large tablet screens. On the right side of the screen there’s some kind of side-bar which shows additional information about the currently selected app. From here you can directly hit a button to lock/restore your apps. The filtering on the other hand can be launched from the application’s top bar.

App Quarantine on Honeycomb


Advanced features

On my own phone I don’t really feel the need to read books, so it was pretty natural for me to just use App Quarantine and disable Google Books. Few days later however there was an update available, I usually just hit Update all in Android market, and the app suddenly got resurrected. By the way the same is also happening if you go along and uninstall all updates of an app in the Andoid application settings. So to avoid such trouble App Quarantine is already detecting if your apps get updated. There are two modes possible: in the automatic mode the apps are automatically kept in quarantine and the user no longer needs to care. If you generally want to have more control then there’s also the interactive mode: as soon as an quarantined app gets updated you’ll receive a notification and can choose yourself if you want to keep this app in quarantine, or not.

Additionally App Quarantine is also supporting Custom ROMs. When you often flash your phone with Custom ROMs then each time you’d manually need to select the apps which you don’t really need and lock them. App Quarantine however is storing this information on your SD card, and as soon as you launch the app after a fresh ROM installation then you’ll be asked to quarantine all unwanted apps with only one click.


Android market statistics

Maybe some people are curious to read what’s happening to this app in numbers. App Quarantine was launched approx. one month ago. During this time around 2.500 people downloaded the app, and of these people more than 1.000 seem to be actively using it. This is around 40% active installs and what I read from other sources this is more or less a typical value. The number of downloads of course are nowhere close to Angry birds, however I think that’s okay if you consider that this is a special niche tool which is only working on rooted droids.

Some more statistics are available: 60% are still running good old Froyo, 25% got their droids updated to Gingerbread, but only a slightly disappointing 0.9% rock it on Honeycomb. 14% are using Samsung devices (Galaxy S, S2, Tab), 15% are on HTC (Desire, Desire HD; Evo, Wildfire…), 6% own Motorola phones (Defy, Droid X) and 3% are killing system apps on their LG Optimus. Furthermore 40% of customers are coming from USA, and around 32% are from Germany.


Technical information

Last but not least there’s a taste of technical information, which is probably only useful to other developers. Well with a roughly 15 years of experience asĀ  developer what can I say about Software development in general? You can test your program as long as you want and it will always play nice, but when another guy is running it then guess what’s the first thing that happens: it will crash horribly! That’s exactly what was happening to App Qurantine too. Starting with the first released version, and probably/hopefully stopped with the latest update, from time to time I had received random crash logs. Unfortunately it wasn’t really reproduceable on my devices so it took me some time and few updates to get it solved. So here are a few hints to avoid similar issues:

  • For some reason it might be possible that your activity (sometimes) receives an onResume more than once. So if you are doing some multi-threaded magic here then consider to run the thread only one time. I already had developed software to process video recording, and I have fixed deadlocks on a real-time anti-virus scanner, so I definitely know about the bad side of the word sometimes.
  • Please use AsyncTask whenever possible and don’t try to build it all from scratch with your own handlers implementation
  • Sometimes (yes, again) the activity is killed before your background thread reaches onPostExecute. I read about two possible solutions to solve this problem: Manually cancel the AsyncTask when your activity is closed (sounded a bit wischiwaschi to me), or otherwise more simple and straight forward: just put an exception handler around your dialog.dismiss() method.


Goodbye! I hope to meet you again!

So that’s it for today. I hope this article maybe gets read by a couple people. If you like it, please help to spread it around. The idea is to post more reports as the app envolves. So this means I will continue to maintain this app and work on new features, hear about your suggestions and feedback, and keep you updated with nice statistics and whatever.


Link in Android market:

https://market.android.com/details?id=com.ramdroid.appquarantine