java - Force close while trying to release WakeLock? -
i have button when click it, turns on wakelock, , works fine! when click again suppose turn wakelock off, instead crashes app! appreciates, , know not because i'm changing images, because part works fine! :) heres code:
powermanager.wakelock wl; //this before oncreate int stayawake = 0; //this before oncreate ((button) findviewbyid(r.id.sleeplock)).setonclicklistener(new view.onclicklistener() { @override public void onclick(view v) { powermanager pm = (powermanager) getsystemservice (context.power_service); wl = pm.newwakelock (powermanager.full_wake_lock, "my tag"); if (stayawake == 0) { ((button) findviewbyid(r.id.sleeplock)).setbackgroundresource(r.drawable.awake); stayawake = 1; wl.acquire(); }else { ((button) findviewbyid(r.id.sleeplock)).setbackgroundresource(r.drawable.sleep); stayawake = 0; wl.release(); } // todo auto-generated method stub } }); logcat:
06-06 00:44:25.206: w/dalvikvm(3855): threadid=1: thread exiting uncaught exception (group=0x40a031f8) 06-06 00:44:25.230: e/androidruntime(3855): fatal exception: main 06-06 00:44:25.230: e/androidruntime(3855): java.lang.runtimeexception: wakelock under-locked tag 06-06 00:44:25.230: e/androidruntime(3855): @ android.os.powermanager$wakelock.release(powermanager.java:325) 06-06 00:44:25.230: e/androidruntime(3855): @ android.os.powermanager$wakelock.release(powermanager.java:300) 06-06 00:44:25.230: e/androidruntime(3855): @ com.something.something.savedgame$5.onclick(savedgame.java:259) 06-06 00:44:25.230: e/androidruntime(3855): @ android.view.view.performclick(view.java:3511) 06-06 00:44:25.230: e/androidruntime(3855): @ android.view.view$performclick.run(view.java:14105) 06-06 00:44:25.230: e/androidruntime(3855): @ android.os.handler.handlecallback(handler.java:605) 06-06 00:44:25.230: e/androidruntime(3855): @ android.os.handler.dispatchmessage(handler.java:92) 06-06 00:44:25.230: e/androidruntime(3855): @ android.os.looper.loop(looper.java:137) 06-06 00:44:25.230: e/androidruntime(3855): @ android.app.activitythread.main(activitythread.java:4424) 06-06 00:44:25.230: e/androidruntime(3855): @ java.lang.reflect.method.invokenative(native method) 06-06 00:44:25.230: e/androidruntime(3855): @ java.lang.reflect.method.invoke(method.java:511) 06-06 00:44:25.230: e/androidruntime(3855): @ com.android.internal.os.zygoteinit$methodandargscaller.run(zygoteinit.java:787) 06-06 00:44:25.230: e/androidruntime(3855): @ com.android.internal.os.zygoteinit.main(zygoteinit.java:554) 06-06 00:44:25.230: e/androidruntime(3855): @ dalvik.system.nativestart.main(native method)
while releasing lock button not have reference again reinitialize button , not set clicklistener
change code
button btn=(button) findviewbyid(r.id.sleeplock); powermanager.wakelock wl; //this before oncreate int stayawake = 0; //this before oncreate btn.setonclicklistener(new view.onclicklistener() { @override public void onclick(view v) { powermanager pm = (powermanager) getsystemservice (context.power_service); wl = pm.newwakelock (powermanager.full_wake_lock, "my tag"); if (stayawake == 0) { btn.setbackgroundresource(r.drawable.awake); stayawake = 1; wl.acquire(); } else { btn.setbackgroundresource(r.drawable.sleep); stayawake = 0; wl.release(); } } }); now code work fine
Comments
Post a Comment