簡體   English   中英

在Android 1.5服務中使用喚醒鎖

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM