Finding and installing lots of new programs using the tools described in the previous article is all well and good, until you realize that some of them stay running in the background as a service. And use up lots of CPU while doing it. And use data without you realizing. And start up by themselves when you boot your phones.
Well, in this article we’ll see what programs can help you monitor what other programs do, and sometimes how you can stop them from doing it.
The common theme in this article is going to be that of “task managers”. Hey, at least I didn’t say “task killers”! Generally speaking, Android manages tasks just fine by itself, and going back to manual task management is way overkill; however, that doesn’t mean the ability to monitor and control tasks can’t be occasionally useful, and most of the programs reviewed today have some task managing ability, to a greater or lesser extent.
OS Monitor is the one that’s most generic about it: it lists all processes in a typical UNIX style (but without neglecting to use the actual Android names and icons for Android applications), providing information about the memory they take and the CPU they’re using.
When you long-press a process entry, you find the obvious options: “Kill Process”, and “Switch to Process”; additionally, and perhaps more interestingly, there is “Watch Log”, which will show the logcat entries for the process. This is likely going to be useful both for developers and for users trying to find out why an application is misbehaving.
Another very useful capability is that of showing all active connections, similarly to what the “netstat” command does; and when you click on an entry, you get a pretty Whois search for the remote host, including its location on a map! In the current version there is even a provision to show which application is making the connection, which can be extremely useful to pinpoint “rogue” data usage.
There is a “Misc” tab showing a few data, including battery and CPU temperature (at least, for my Milestone these correspond to the battery and CPU), battery voltage, free space on the various system partitions, and the CPU frequency scaling range; in theory, these values can be changed if you have root and enable “root mode” in the program’s settings, but for me this option is grayed out.
Finally, a “Message” tab shows, alternatively, the system’s dmesg log or logcat (you can switch from the settings), letting you know what is going on with your device in real time.
License: open source (GPL v3)
Price: free, without ads
Behavior: starts at boot then exits
Highlights: Comprehensive information about processes, network, and system
Task manager and system information tool with:
– list of tasks with process name, CPU load, memory usage and running status
– list of network interfaces with transmitted/received bytes count
– list of current network connections with originating program and geographic whois
– information about CPU frequencies and temperature, battery health, capacity, voltage and temperature, free space on partitions
– color-coded logcat and dmesg, with filtering by process and tag
OS Monitor shows a bit of everything, but doesn’t let you control much. The first program we’ll see that actually acts on the values it sees is Watchdog. It’s basically a background CPU monitors that keeps measuring the CPU percentage taken up by each process, and warns you if a threshold is exceeded. This can come pretty useful, because while, in general, Android satisfyingly manages your tasks’ life cycle, it’s possible for a “rogue” task to keep taking up CPU while in the background and never get killed by the system.
It would be nice if Watchdog could actually kill misbehaving tasks by itself; currently, however, all it can do – at least in its free “lite” version – is produce a (very configurable) notification.
A word of warning: Watchdog needs to periodically check CPU usage, and to be effective it must do this relatively often. However, this can consume a fair amount of battery itself, and I recommend setting a “CPU polling interval” of 3 or 5 minutes if you are concerned about battery usage.
Price: free, “lite” version, without ads
Behavior: starts at boot, runs periodically, provides widgets
Highlights: detects background apps that don’t sleep like they should, but take up CPU
A process activity monitor featuring:
– configurable alerts for processes exceeding a given CPU utilization threshold
– ability to whitelist tasks to be excluded by the alerts
– task manager with CPU usage, memory taken, time since started and ability to launch or kill
The program consumes a bit of battery itself if set to poll for CPU usage more often than every couple of minutes. It doesn’t support killing misbehaving tasks automatically, but only warns about them.
But beyond the CPU usage percentage, I bet what you’d like to know is how much battery an application is taking. Well, Android’s “Battery Use” window already tells you that, but if you’d like to know in some more detail, you should try PowerTutor.
Android does not have an API for querying the instant current draw from the battery, and on several phones there appears not to be a way to sense that in the hardware at all. PowerTutor tries to overcome this fact by knowing what the various system components – 3G radio, WiFi, LCD, etc – consume, and keeping track of applications using them.
This is of course not perfect, but for the phone models it supports only, PowerTutor claims to be within 95% accuracy; for other phones, you really should take its data with a grain of salt – but that doesn’t mean you shouldn’t use the app, since it can still provide interesting data, and letting it send its statistics (see below) may help the developers support your phone in the future!
You may not want to keep PowerTutor running all the time, because its real-time monitoring can take a moderate on the battery. At least it’s honest, and it says so itself when you look at the data!
Keep in mind also that PowerTutor sends statistics home by default, for a total of about 2Mb every 24 hours. Sending of these can however be disabled, and the programs favors sending them from WiFi rather than from a cellular connection.
I personally feel comfortable enough sending anonymous data to an academic institution’s project.
Price: free, without ads
Availability: Market, http://powertutor.org/
Behavior: starts at boot, then runs as a service, provides widgets
Highlights: Only program around that at least attempt to calculate battery current draw
Power usage monitoring service that can show:
– current, average and historical power usage for all apps that have run, and by resource used (CPU, screen, WiFi, cellular data)
– overall usage graphs (chart or pie graph) for CPU, screen, WiFi, 3G, GPS and Audio in a given time span
– global system power and battery statistics
It achieves this not by measuring current draw directly, which is not possible on Android, but by eastimating it for each resource used.
How do we stop applications from starting at boot time? There are a few around would benefit from that. Well, we don’t really, according to the developer of Autorun Killer, as it would be a tad dangerous and require special permissions, but you can stop them just after they’ve started. That’s better than nothing, I guess? (at least if your goal is saving memory – I have my doubts about saving startup time)
There are a few apps that let you achieve this on the Market (and I can’t 100% exclude that some of them actually prevent programs from starting, I just go by what the Autorun Killer fellow says), but they’re “lite” or paid and none seemed very convincing to me.
Autorun Killer has a trivial but useful thing that the others lack: it shows which processes are currently running among those that get started at boot time, so you can tell which apps are only briefly run to initialize something, and which actually keep going as services or in the background.
Price: free, “lite” version, with ads
Availability: Autorun Killer
Behavior: starts at boot then exits, can make use of root access
Highlights: lets you stop apps that start automatically at boot time, and tells you which ones of them are still running
Lists the tasks that are automatically run on system startups, and lets you stop them as soon as they start.
Mentions which of those tasks are currently running, and which ones are so stubborn as to automatically respawn (these can only be killed for good in the “donate” version of the program).
The fact that the tasks are not prevented from starting, but merely killed after start, is a bit unconvincing.
Some apps start when you don’t want them to, but other apps die when you want them to stay running. A prime example, at least for me, is the default web browser: if I leave it while it’s opening a page, more often then not I find it has to load the page again when I go back to it. I guess it’s because it’s a very big app memory-wise, and the system has no reason to give it higher priority than other apps when deciding what to kill.
AutoKiller, written by the same author as Autorun Killer, is mainly intended to tweak the memory constants Android uses to decide when to kill various categories of programs (foreground ones, background ones, services, etc), but while I would personally leave these constants alone, AutoKiller is also (perhaps unsurprisingly by now) a task manager, with one unique feature: for each task, it lets you see and adjust the OOM (out of memory) kill priority. The lower the priority, the less likely a process will be killed by Android.
Unfortunately, this is an experimental feature, because OOM priority changes are temporary and need to be re-applied manually each time the program is started, or even when it’s brought to the foreground. To address this, AutoKiller would probably need to be made into a service that checks for these priorities periodically.
Another plus of AutoKiller as a task manager is that it shows the memory taken by each program in a manner more consistent with what Android’s built-in Applications list does, and thus – I hope – more accurate, while other task managers tend to present programs as always taking at least 10MB of memory, for some reason.
Price: free, with ads
Behavior: uses root
Highlights: shows and let you change the OOM (out of memory) kill priority for your processes
A system tweaker and task manager for root users, which:
– lets you change the constants defining the free memory amounts below which background apps (“hidden”) and cached apps (“empty”) get killed
– features a task manager with distinct sections for processes and services, listing icons, names, memory taken and running state
– shows the real (I assume) memory occupation of each process
– allows lowering the OOM priority for processes
– lets you kill, uninstall or switch to any process
The OOM priority feature is of limited usefulness now because its effects are only temporary, and don’t survive a process restart.
Another unwanted thing programs may do is connect to the internet. I’ve found lots and lots of programs that should logically have nothing to do with networking actually have the “full Internet access” permission, be it in order to display ads, or to send “anonymous statistics”, or be it even more obscure reasons.
If your phone is rooted, DroidWall can prevent specific apps from using data (when working in blacklist mode), or forbid data usage for all apps excluding the ones you indicate (in whitelist mode), for those times when you’re roaming or without a data plan.
Unfortunately, it is not interactive like some firewalls for Windows are, which means it won’t show “this app is trying to connect! Allow or Deny?” popups, but will only allow you to change the settings a priori. I believe this is a limitation of the Linux kernel that can’t be done much about.
License: open source (GPL)
Price: free, without ads
Availability: http://code.google.com/p/droidwall/, Market
Behavior: starts at boot then exits, uses root, provide widgets
Highlights: can decide which apps have access to data (cellular or WiFi independently)
The only firewall currently available for (rooted) Android devices:
– works in whitelist and blacklist mode
– lists all installed apps having Internet permissions
– lets you block or allow individual apps, separately for cellular data and WiFI
– can log attempts to connect by blocked apps
– can be locked by means of a password
It would be nice if the firewall were interactive, but this is probably impossible (although it might be possible for Android Java apps, but only by modifying Android itself).
You may also want to forbid internet connectivity not by app, but by destination address… namely, remove the ads from apps by stopping connections to known ad-serving addresses.
This can be done manually on a rooted device, by editing the hosts file, but AdFree provides a friendlier way to do it, and also lets you update the list of ad servers from its own server. It’s a pity that this is not done automatically, but you have to start the application and tell it to update.
Please note that adware apps will still generally show the banner box where the ads normally are; only, the ads itself won’t be shown or transferred over the network (which is a must if you don’t have a data plan).
Price: free, without ads (duh!)
Behavior: starts at boot then exits, uses root
Highlights: blocks known ad-serving addresses, and keeps the list of them updated
This ad blocker loads a centralized list of host known to serve ads, and tells Android to block connections to them. It doesn’t need to stay running.
It can be set to check for updates automatically, but any update found will still need to be applied manually.
But do you know which applications have the ability to connect to the internet in the first place? Well, if you use DroidWall it’ll know by itself and only show those that do, and AdFree just stops all ads regardless of app.
But you may certainly still want to know which apps use a particular permission, and if you’re not running Android 2.2 (Froyo), there is no built-in way to do that. aSpotCat is the solution.
If you click on the “List apps by permissions” button, it will show you a list of permission categories and you can either show all apps using permissions from a given category, or look at the actual permissions in a more fine-grained fashion. Apps are shown with their icon for ease of reading. and can be uninstalled directly from inside the program.
If you don’t need all of aSpotCat’s features, Permissions is an open source alternative that does its job.
Price: free, with ads
Highlights: for every permission, lists apps that use it
An application manager that can
– for each Android permission, or permission category, list all installed apps that have it
– bookmark arbitrary permissions to be listed on their own page
– list all installed apps
– for any installed app, list the permission it uses, uninstall it or show it on the Market
A feature similar to what this program does is already included in the Android 2.2 (Froyo) Applications settings.
And finally, if none of the several programs featuring a task manager (OS Monitor first and foremost) managed to convince you, I want to mention an alternative called SystemPanel, which while offering no particularly novel or appealing feature, does give fairly comprehensive info about the system, using a not very standard but sleek interface. And yes – it has a “kill all” button, which I personally wouldn’t use if I were you.