The pm
and keepScreenOn
variables are globally defined.
I grab the PowerManager.WakeLock in my OnCreate method:
pm = (PowerManager) getSystemService(Context.POWER_SERVICE);
keepScreenOn = pm.newWakeLock(PowerManager.SCREEN_BRIGHT_LOCK,"tpd");
in my onStart, onResume, and onRestart I grab the lock with
if (keepScreenOn == null) {
keepScreenOn = pm.newakeLock(PowerManager,SCREEN_BRIGHT_LOCK,"tpd");
}
keepScreenOn.acquire();
in my onDestroy, onPause, and onStop I release the lock with:
if (keepScreenOn != null) {
keepScreenOn.release();
keepScreenOn = null
}
After my app exits I get a failure screen and adb complains that
java.lang.Exception: WakeLock finalized while still held: tpd
Tracing shows that I released the lock before exit. What have I missed?
There is no way out of the app without crossing at least one of
onPause
, onStop
, or onDestroy
. I can see that the app called
release()
as often as it called acquire() so even though the
wakelock is reference counted it should still have zero refs.