How can I see which wakelocks are active
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.
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
.