[BetterBatteryStats] chamonix:
I started BetterBatteryStats because I was missing the great battery history that Spare Parts allowed to call on Froyo. It has been a long journey since the first version. BetterBatteryStats provides an insight in following categories:

- General "other stats "overview: Awake, Deep Sleep, Screen On, Phone On, Wifi On, Wifi Running ratios

- Kernel Wakelocks

- Partial wakelocks

- Alarms/Wakeups

- CPU States

- Network stats

- Process stats with User and System CPU time

Use so called references BetterBatteryStats shows data for different samples over time:

- since boot

- since unplugged

- since charged

- since screen off

- custom references

- any combination of the above (e.g. from screen off to screen on)

BetterBatteryStats is calling the "batteryinfo" service of Android to retrieve data already lying there without generating overhead. Since Kitkat Google has revoked the permission for normal apps to access these stats (without valid reasons IMHO). You can read more about that here.

Fortunately and thanks to @Looki75 there is a way to work around the restrictions intruduced by google in Kitkat and run BBS on non-rooted devices. Please see here for more details.

BetterBatteryStats has been tested on Froyo, Gingerbread, Honeycomb (3.1, thanks to daveid), ICS, JB, Kitkat and Lollipop on different ROMs and Kernels.

What are wakelocks and why should you care about them?

When it comes to Android the most discussed and commented topic that I know is battery drain / battery life. I'm a quite heavy user because I spend a lot of time on the train every day reading my mails, surfing and listening to music but still my phone is off for a long time during the day and while I accept the battery being drained while I use the phone I care about it draining slowly while "doing nothing".

Wakelocks or to be more precise partial wakelocks is a pattern than helps devs to make sure that important pieces of their code do not get interrupted. Wakelocks are not bad per se, they are a tool. There are many poor implementations that make use of wakelocks and BBS helps making that transparent.

Caution

: do not use and wakelock supressor tools. They will cause an erratic behavior of your phone, causing more harm than good.

Basically the phone has (simplified, kernel devs don't shoot) three states:

1. awake with screen on

2. awake

3. sleeping (that's you phone favorite state)

The transitions are from (1) to (2) and finally from (2) to (3). Now as long as you use your phone it's in (1) and does not leave that state as long as you keep using it interactively. If you stop using it the phone is aiming to go to (3) as fast as possible.

And here's where wakelocks are important: as our phones as smartphones they tend to do background processing. Some of this processing is important like e.g. making a phone call, listening to music or synchronizing your contacts.

As the phone wants to go from (2) to (3) and on the other hand you don't want to hang up while you are in a call the app keeps hold of a wakelock to prevent that transisiton. When you hang up the partial wakelock gets release and here we go (the phone goes to sleep).

So partial wakelocks is a tool and it's not something that we should forbid for obvious reasons. Now there are cases when the design on an app is not real life proven (conditions of poor of no converage) and the wakelocks have negative effects because they are held unnecessarily or for too long.

BetterBatteryStats identifies these wakelocks and using your expertise or the once from our users here you can understand what happens and find a strategy to change that for the better.

And what about wakeups?

Wakeups (alarms) is a pattern to be used when an application should to something after a certain period of time (or at a certain time). Again, an alarm is a tool and is nothing.

On the other hand there are a lot of poor implementations that BBS can help you discover:

- alarms waking up the device when all the app should do is refresh the screen: in such cases the app uses the wrong type of alarm, there are alarms that are specifically to be used only when the screen is on

- to frequent alarms: in case of e.g. poor network conditions some apps may use alarms to repeat failed network operations. Doing this too often will cause too many wakeups (and wakelocks for doing the handling)

- apps that wake up your device when you did not expect any activity while screen is off: you can use the info provided by BBS to contact the dev about such issues

Try it yourself

If you need help

Always add the whole context when asking for help. Most of the times a dumpfile is helpful, sometimes screenshots showing your observations may help as well.

Before posting a dump please make sure that the references for kernel wakelocks and alarms were processed correctly. Reading a dump takes a few minutes and it would be great if you could not waste the time of whomever studies it, aiming at helping you.

Generally a dump "since unplugged" is better than "since charged". When you start your analysis make sure to follow following procedure:

- enable watchdog processing in BBS settings

- verify from/to references is checked under custom views

- full charge device then let it run down to ~95%

- put device to sleep for at least 6 hours (no touchy!)

- wake device and launch BBS

- adjust from/to references to 'screen off' and 'screen on'

- save dumpfile from share menu

- post resulting log to this thread (or provide cloud link)

I will not reply to posts with incomplete dumps

Reporting bugs

If you want to report a bug please make sure:

- that you can reproduce the problem

- explain what the problem is, how you could reproduce it and what is going wrong (a sentence lke "xxxx does not work for me" is a waste of your time and wil be ignored)

- enable debug in advanced prefernces

- post a logcat

A good read about reporting bugs

Translations

Starting with 2.0 BBS is getting multi-language. Currently following languages are included:

- en: main language, maintained by me

- ru: translation thanks to @gaich

- cz: translation thanks to @mag01

- es translation thanks to @vldesco

- it translation thanks to @code010101

- hr translation thanks to @seky2205

- fr translation thanks to @xavihernandez

- de translation thanks to @Minty123

- tr translation and other language improvement by @Eleo

If you want to contribute with a new language please feel free to offer you service and contribute to BBS, by submitting a pull request to the github project with the translated strings.xml. But please be aware of the fact that translation is a continuous work: even if the initial effort is higher there will be unavoidable changes to the english master XMLs that will require regular updates of your translations.

If you have a recommendation for a

free

croud-translation service that you would prefer I am open for suggestions.

Thanks

To nobnut for donating me a Nexus S for testing

To nobnut and brandall for their support, encouragements, testing and constructive feedback in the early stages of the development.

To @Javinotfound or the new icons / logo

To suku_patel_22, jeremysherriff, Karpfenhai, Tungstwenty, It_ler, Perseus71 and mag01 for their help in this thread and their systematic testing my betas and RCs

To Entropy512 for providing support and insights about kernel wakelocks and helping making BBS a better tool