How can I see which wakelocks are active
Does Android definitely release wakelocks when a process ends?
I doubt it, though I do not know for certain.
Is it possible an app was badly written and didn't release a wakelock before exiting?
AFAIK, yes.
Is there any way to see the active wakelocks?
Run adb shell dumpsys power
.
You can use below adb command to require a wake lock
adb shell "echo mylock > /sys/power/wake_lock"
Then, you can use below command to watch if this lock is active. You will see the time column continuously change, it means the wake lock is active
watch -n 1 'adb shell "cat /proc/wakelocks" | grep mylock'
Now, use this adb command to release the wake lock
adb shell "echo mylock > /sys/power/wake_unlock"
Then, check it again, the time column will freeze, it means the wake lock is non active
watch -n 1 'adb shell "cat /proc/wakelocks" | grep mylock'
You can use the same technique to observe the wake lock you acquire in the code.
As others have already said, adb shell dumpsys power can show you active wakelocks.
However, for apps that didn't release wakelock, as per the answer here: https://stackoverflow.com/a/16258624/428271 It should be released by Android. However, it is for case where app/process is killed, but it should be applicable when app/process is complete too. It also provides the source code references rather than just saying 'checked in code'
In new versions of Android you can see list of wakelocks here:
adb shell "cat /sys/kernel/debug/wakeup_sources"