![](/img/trans.png)
[英]Android: Using wakelock in service triggered by alarmmanager
[英]Using a wakelock in a service Android 1.5
您好我正在嘗試使用服務來控制喚醒鎖,以便我可以在應用程序運行時永久保持屏幕不亮。 我創建喚醒鎖並在onCreate()中激活它並在onDestroy()中釋放它但是我得到錯誤“wl無法解析”。 誰能解釋我怎么能克服這個? 代碼如下:
public class WakeLockService extends Service {
@Override
public IBinder onBind(Intent arg0) {
// TODO Auto-generated method stub
return null;
}
@Override
public void onCreate() {
PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE);
PowerManager.WakeLock wl = pm.newWakeLock(PowerManager.FULL_WAKE_LOCK, "My Tag");
wl.acquire();
}
@Override
public void onDestroy() {
wl.release();
}
}
好吧,即使您使用實例變量,我也認為這不是實現它的方法。 誰會打電話給destroy()
? 我希望不是你,這是OS的工作。 但是當你持有喚醒鎖時,你的destroy()
方法被調用是不太可能的,因為操作系統將首先銷毀其他活動/服務。
除此之外,在onCreate()
方法中獲取喚醒鎖定為時已晚。 在到達onCreate()
之前,當您從警報觸發服務時,手機可能已經進入睡眠狀態, onCreate()
的活動則觸發了服務。
由於你沒有提供太多的背景,很難說你應該做些什么。 通常的事件是這樣的。 調用BroadcastReceiver
並在onReceive()
獲取喚醒鎖並將其放入服務的靜態變量中。 當服務完成后,它應該調用stopSelf()
,釋放喚醒鎖,然后使保持對鎖的引用的靜態變量為空。
此外,如果您使用服務,完全喚醒鎖很可能不是您想要的,但部分喚醒鎖定。 你不需要屏幕保持,對嗎?
對不起,但喚醒鎖使用起來非常復雜,因為我上面描述的問題正是如此。 這絕對是一個高級主題,很容易搞砸。 如果你這樣做,你的應用程序會得到非常難看的評論,因為持續時間過長是一個重大的冒犯,因為它耗盡了電池。 請不要錯誤地采取這種方式,但鑒於您在此處發布的問題的性質(語法/編譯器錯誤),我強烈建議您搜索沒有服務和喚醒鎖定的解決方案。
你不是錯過了這條線
PowerManager.WakeLock wl = pm.newWakeLock(PowerManager.FULL_WAKE_LOCK, "My Tag");
在onDestroy()? 它是onCreate()中的局部變量,但它根本沒有在onDestroy()中聲明。
或者,更有可能的是,您可能希望將其設為WakeLockService類的字段而不是局部變量。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.