My Battery
Fourteen months of charge cycles from my daily phone, pulled out of AccuBattery's SQLite database over adb because the app still has no export button. How I got it is written up here.
Capacity over time
- Measured while charging
- Measured while discharging
View as table
| Month | Charging | Discharging | % of design | Sessions |
|---|---|---|---|---|
| Jul 25 | 3446 | 2940 | 81.1% | 22 |
| Aug 25 | 3426 | 2813 | 80.6% | 49 |
| Sep 25 | 3406 | 2772 | 80.1% | 46 |
| Oct 25 | 3413 | 2632 | 80.3% | 38 |
| Nov 25 | 3357 | 2622 | 79% | 42 |
| Dec 25 | 3272 | 2720 | 77% | 46 |
| Jan 26 | 3296 | 2854 | 77.6% | 53 |
| Feb 26 | 3311 | 2670 | 77.9% | 43 |
| Mar 26 | 3301 | 2754 | 77.7% | 52 |
| Apr 26 | 3322 | 2711 | 78.2% | 44 |
| May 26 | 3271 | 2695 | 77% | 61 |
| Jun 26 | 3266 | 2794 | 76.8% | 56 |
| Jul 26 | 3214 | 2648 | 75.6% | 60 |
| Aug 26 | 3167 | 2717 | 74.5% | 69 |
| Sep 26 | 3195 | 2579 | 75.2% | 12 |
Why the two lines disagree. Charging and discharging are separate measurements of the same cell, and they differ by around 18% here: 3212 mAh counted going in against 2639 mAh counted coming back out. Some of that gap is genuine charging loss, the rest is the kernel's current sensor being more accurate at a steady charging current than across the ragged draw of real use. AccuBattery's own headline figure comes from the charging side, which is why it asks you to charge to 100% to take a reading, and it is the blue line here that matches what the app shows.
What one full charge buys
| Per full 0-100% charge | Worst | Typical | Best |
|---|---|---|---|
| Screen-on time hours | 2.07 | 6.17 | 8.78 |
| Time off the charger hours | 8.2 | 29.4 | 54.8 |
| Time to charge minutes | 138 | 94 | 53 |
Typical is the median across 345 deep discharges and 348 deep charges, each scaled to a full 0-100% swing so sessions of different depth can be compared. Charging times are projections from partial charges; across the 265 charges that actually reached 99%, the observed spread was 45 to 135 minutes.
How I charge, and what it costs
- Plugged in at
- Unplugged at
This is close to the worst pattern for a lithium cell. Of 396 charges, 353 (89%) started below 20%, and 273 (69%) ran all the way to 100%. Deep discharges and long sits at a full charge are the two habits that age a cell fastest, and I have been doing both, nearly every day, for 14 months. The capacity line above is what that looks like.
When the phone goes on charge
Where the screen time went
What each app costs to run
Read these as a rate: ****** at 490 mA means about 490 mAh gone per hour it is on screen, so roughly 6.6 hours of it would flatten a full 3212 mAh charge. At the other end, Brave would last about 9.5 hours.
These are fitted, not measured. AccuBattery records how much charge each session used and which app was in front,
but never the drain of one app on its own. So this solves for it: treat each
discharge as screen-on mAh ~= sum of (hours in app x that app's rate) and find the set of non-negative rates that best fits all
345 sessions at once. The fit explains
76% of the variance between sessions
(R² 0.758), which is decent but leaves room for everything
this model ignores: screen brightness, signal strength, and background work.
Apps under 40 hours of use are pooled into "everything else",
because below that the fitted rate says more about noise than about the app.
Screen-on drain over time
Screen-on drain has drifted from 390 mA to 408 mA, up about 5%. That is not the battery ageing: a worn cell holds less charge but does not make the phone draw more. It means the phone is doing more work per hour of screen time than it used to, from some mix of heavier apps, more background activity, and software that has grown since Android 15 landed. Combined with a smaller battery, it compounds: less charge to spend, spent faster.
How this page is built
AccuBattery keeps everything in /data/data/com.digibites.accubattery/databases/batterysaver, an ordinary
SQLite file. adb root on a custom ROM is enough to read it, no Magisk and
no wipe. A script reduces the 90 MB database to the 3.1 KB of aggregates
this page renders, so nothing raw is committed to the repo.